Цикл через каждый столбец таблицы HTML и получение данных с помощью jQuery
Я пытаюсь получить данные внутри html <tbody>
. В принципе, у меня много таких строк;
![enter image description here]()
<tbody>
<tr>
<td>63</td>
<td>Computer</td>
<td>3434</td>
<td>
<button class="btn-medium btn-danger remove" id="mprDetailRemove"><i class="icon-remove"></i></button>
</td>
</tr>
<tr>
<td>64</td>
<td>Stationary</td>
<td>111</td>
<td>
<button class="btn-medium btn-danger remove" id="Button1"><i class="icon-remove"></i></button>
</td>
</tr>
<tr>
<td>64</td>
<td>Stationary</td>
<td>11</td>
<td>
<button class="btn-medium btn-danger remove" id="Button2"><i class="icon-remove"></i></button>
</td>
</tr>
</tbody>
Теперь я зацикливаюсь и пытаюсь получить значения <td>
следующим образом:
var table = $("#mprDetailDataTable table tbody");
table.find('tr').each(function (key, val) {
$(this).find('td').each(function (key, val) {
var productId = val[key].innerHTML; // this isn't working
var product = ?
var Quantity = ?
});
});
Но я не могу получить значения (html-текст) каждой строки. Я хочу присвоить эти значения локальным переменным.
Кроме того, я не хочу получать innerHTML
кнопки (которая находится в каждой строке)
Ответы
Ответ 1
Использование вложенного .each()
означает, что ваш внутренний цикл выполняет один td за раз, поэтому вы не можете установить productId
и product
и quantity
все во внутреннем цикле.
Также использование function(key, val)
, а затем val[key].innerHTML
неверно: метод .each()
передает индекс (целое число) и фактический элемент, поэтому вы должны использовать function(i, element)
, а затем element.innerHTML
. Хотя jQuery также устанавливает элемент this
для элемента, поэтому вы можете просто сказать this.innerHTML
.
В любом случае, вот способ заставить его работать:
table.find('tr').each(function (i, el) {
var $tds = $(this).find('td'),
productId = $tds.eq(0).text(),
product = $tds.eq(1).text(),
Quantity = $tds.eq(2).text();
// do something with productId, product, Quantity
});
Демо: http://jsfiddle.net/bqX7Q/
Ответ 2
попробуйте это
$("#mprDetailDataTable tr:gt(0)").each(function () {
var this_row = $(this);
var productId = $.trim(this_row.find('td:eq(0)').html());//td:eq(0) means first td of this row
var product = $.trim(this_row.find('td:eq(1)').html())
var Quantity = $.trim(this_row.find('td:eq(2)').html())
});
Ответ 3
Мой первый пост...
Я попробовал это: изменил 'tr' для 'td', и вы получите все HTMLRowElements в Array, и использование textContent изменится с Object на String
var dataArray = [];
var data = table.find('td'); //Get All HTML td elements
// Save important data into new Array
for (var i = 0; i <= data.size() - 1; i = i + 4)
{
dataArray.push(data[i].textContent, data[i + 1].textContent, data[i + 2].textContent);
}
Ответ 4
Вы можете попробовать с помощью textContent.
var productId = val[key].textContent;
Ответ 5
Когда вы создаете свою таблицу, поместите свой td с классом = "suma"
$(function(){
//funcion suma todo
var sum = 0;
$('.suma').each(function(x,y){
sum += parseInt($(this).text());
})
$('#lblTotal').text(sum);
// funcion suma por check
$( "input:checkbox").change(function(){
if($(this).is(':checked')){
$(this).parent().parent().find('td:last').addClass('suma2');
}else{
$(this).parent().parent().find('td:last').removeClass('suma2');
}
suma2Total();
})
function suma2Total(){
var sum2 = 0;
$('.suma2').each(function(x,y){
sum2 += parseInt($(this).text());
})
$('#lblTotal2').text(sum2);
}
});
Ejemplo completeto