2014-04-11 57 views
0

我試圖獲取頁面上多個輸入的值。輸入的ID是動態生成的。獲取其ID變化的元素的值

<input id="updates_662224305" class="text quantity" type="text" value="1" name="updates[662224305]" size="4"> 

我正在爲包含輸入的表格和單元格運行一個循環。我得到的innerHTML輸入位於細胞,然後切片,他們的ID是部分:

var racetamarray = [], 
racetamtotal = 0, 
table = document.getElementById('cart-table'), 
cells = table.getElementsByTagName('td'); 

for (var i=0,len=cells.length; i<len; i++){ 

    if(cells[i].innerHTML.indexOf("ncombo-racetam") != -1) { 
     i+=3; 
     var racetaminput = cells[i].innerHTML; 
     var racetaminputcontain = racetaminput.slice(43,60); 
     var racetamelem = document.getElementById(racetaminputid); 
     racetamarray.push(parseInt(racetamelem.value)); 
    } 
} 

這在Firefox的工作,因爲我能夠提取它們的ID,並把它們放在變量racetamelem。但是,當我在Chrome中嘗試它時不起作用,切片出現在字符串的不同部分,並且不捕獲它們的ID。有沒有更好的方法來切分或將輸入從字符串轉換爲DOM元素?

HTML在表中的行中的一個:

<tr class="item sampler-pramiracetam-capsules"> 
<td> 
<span class="ncombo-racetam"></span> 
<a href="/products/sampler-pramiracetam-capsules"> 
<img src="//cdn.shopify.com/s/files/1/0173/1766/products/PramiracetamCaps_grande_thumb.jpg?v=1396441752" alt="Sampler, Pramiracetam Capsules" /> 
</a> 
</td> 
<td> 
<a href="/products/sampler-pramiracetam-capsules">Sampler, Pramiracetam Capsules - 30 Capsules</a></td> 
<td>$8.90</td> 
<td><input class="text quantity" type="text" size="4" id="updates_658967781" name="updates[658967781]" value="1" class="replace" /></td> 
<td>$8.90</td> 
<td><a class="btn remove-from-cart" href="/cart/change?id=658967781&quantity=0">Remove</a></td> 
</tr> 
+0

任何機會,你可以把它放在jsfiddle? – Pete

+3

爲什麼不只是'input = table.getElementsByTagName('input')'獲取所有輸入到一個NodeList? – MrCode

+0

同意MrCode。根據瀏覽器的支持要求,你也可以使用'table.querySelectorAll('input')' – Jack

回答

1

此遍歷表中的行,並檢查用於與類名的第一小區的任何元件,如果找到然後按輸入值(從第四個單元格)到陣列。

演示:http://jsfiddle.net/SEaE4/

var racetamarray = []; 
var table = document.getElementById('cart-table'); 
var row; 

for(var i=0; i<table.rows.length; i++){ 
    row = table.rows[i]; 
    if(row.cells.length > 3){ 
     if(row.cells[0].querySelectorAll('.ncombo-racetam').length) { 
      racetamarray.push(row.cells[3].getElementsByTagName('input')[0].value); 
     } 
    } 
} 

console.log(racetamarray); 

附註:如果你需要支持IE7或以上,那麼你將需要更多的代碼替換querySelectorAll()調用來檢查每個元素的類。

+0

太棒了,謝謝! –