Как получить значение ячейки таблицы, используя jQuery?

213

Я пытаюсь понять, как получить значение ячейки таблицы для каждой строки, используя jQuery.

Моя таблица выглядит так:

<table id="mytable">
  <tr>
    <th>Customer Id</th>
    <th>Result</th>
  </tr>
  <tr>
    <td>123</td>
    <td></td>
  </tr>
  <tr>
    <td>456</td>
    <td></td>
  </tr>
  <tr>
    <td>789</td>
    <td></td>
  </tr>
</table>

Я в основном хочу перебрать таблицу и получить значение Customer Idстолбца для каждой строки.

В приведенном ниже коде я выяснил, что мне нужно сделать это, чтобы он проходил по каждой строке, но я не уверен, как получить значение первой ячейки в строке.

$('#mytable tr').each(function() {
    var cutomerId = 
}
Шон Тейлор
источник
4
Вот полное руководство с демонстрацией того, как получить значение TD ячейки таблицы. Codepedia.info/jquery-get-table-cell-td-value-div
singh

Ответы:

306

Если вы можете, возможно, стоит использовать атрибут класса в TD, содержащий идентификатор клиента, чтобы вы могли написать:

$('#mytable tr').each(function() {
    var customerId = $(this).find(".customerIDCell").html();    
 });

По сути, это то же самое, что и другие решения (возможно, потому что я вставил копию), но имеет то преимущество, что вам не нужно менять структуру кода, если вы перемещаетесь по столбцам или даже помещаете идентификатор клиента в <span>при условии, что вы сохраните атрибут класса с ним.

Кстати, я думаю, вы могли бы сделать это в одном селекторе:

$('#mytable .customerIDCell').each(function() {
  alert($(this).html());
});

Если это облегчает жизнь.

Дженнифер
источник
4
Я бы сказал, $ ('# mytable td.customerIDCell'). Each (function () {alert ($ (this) .html ());}); но +1
Мэтт Бриггс
:-) спасибо - но что, если вы хотите поместить его в промежуток (возможно, я плохо отформатировал промежуток в своем ответе!)
Дженнифер
2
Использование класса на tr особенно полезно, если у вас есть <td> в <tfoot> (или вы используете <td> вместо <th>) и не хотите их.
Фрэнк Люк
$ ('# mytable tr'). each (function () {var customerId = $ (this) .find (". customerIDCell"). html ();});
Усама Ходрог
но если я хочу получить tr html, то, что мы можем сделать
Разработчик
132
$('#mytable tr').each(function() {
    var customerId = $(this).find("td:first").html();    
});

То, что вы делаете, это итерация по всем trs в таблице, поиск первого td в текущем tr в цикле и извлечение его внутреннего html.

Чтобы выбрать конкретную ячейку, вы можете сослаться на них с индексом:

$('#mytable tr').each(function() {
    var customerId = $(this).find("td").eq(2).html();    
});

В приведенном выше коде я буду получать значение третьей строки (индекс начинается с нуля, поэтому индекс первой ячейки будет равен 0)


Вот как вы можете сделать это без jQuery:

var table = document.getElementById('mytable'), 
    rows = table.getElementsByTagName('tr'),
    i, j, cells, customerId;

for (i = 0, j = rows.length; i < j; ++i) {
    cells = rows[i].getElementsByTagName('td');
    if (!cells.length) {
        continue;
    }
    customerId = cells[0].innerHTML;
}

Андреас Греч
источник
1
Спасибо, это было более полезно для меня, так как я не имею контроля над разметкой документа, который я хочу проанализировать с помощью jQuery. Так что возможность использовать «td: first», «td: last» и т. Д. Очень помогла.
атомные атомы
1
eq (2) получит значение третьего столбца, а не третьего ряда.
live-love
Что такое eq (2) в вашем коде? Я имею в виду 2 это индекс какой тд или тр?
TechnicalKalsa
@Singh Элемент в индексе 2 tdколлекции, возвращаемой find("td")функцией.
Андреас Греч
Мне нравится вариант 2 с индексом как ссылка, моя скрипка здесь
HattrickNZ
18

менее сомнительный подход:

$('#mytable tr').each(function() {
    if (!this.rowIndex) return; // skip first row
    var customerId = this.cells[0].innerHTML;
});

очевидно, это можно изменить для работы с не первыми ячейками.

Джимми
источник
8
$('#mytable tr').each(function() {
  // need this to skip the first row
  if ($(this).find("td:first").length > 0) {
    var cutomerId = $(this).find("td:first").html();
  }
});
Strelok
источник
2
Нет необходимости пропускать первую строку, потому что она содержит <th>, а не <td>, поэтому их данные не будут извлечены
Andreas Grech
7

Попробуй это,

$(document).ready(function(){
$(".items").delegate("tr.classname", "click", function(data){
            alert(data.target.innerHTML);//this will show the inner html
    alert($(this).find('td:eq(0)').html());//this will alert the value in the 1st column.
    });
});
Нихил Динеш
источник
1
второго элемента, а не первого, эквалайзер начинается с 0
Claudiu Creanga
4

Вы не используете идентификатор для этого столбца? скажи это:

    <table width="300" border="1">
          <tr>
            <td>first</td>
          </tr>
          <tr>
            <td>second</td>
          </tr> 
          <tr>
            <td>blah blah</td>
            <td>blah blah</td>
            <td id="result">Where the result should occur</td>
          </tr>
    </table>


<script type="text/javascript">
        $('#result').html("The result is....");
</script>
MOH3n MOH
источник
4

Это работает

$(document).ready(function() {
    for (var row = 0; row < 3; row++) {
        for (var col = 0; col < 3; col++) {
            $("#tbl").children().children()[row].children[col].innerHTML = "H!";
        }
    }
});
Дэвид
источник
2

попробуй это :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
    <title>Untitled</title>

<script type="text/javascript"><!--

function getVal(e) {
    var targ;
    if (!e) var e = window.event;
    if (e.target) targ = e.target;
    else if (e.srcElement) targ = e.srcElement;
    if (targ.nodeType == 3) // defeat Safari bug
        targ = targ.parentNode;

    alert(targ.innerHTML);
}

onload = function() {
    var t = document.getElementById("main").getElementsByTagName("td");
    for ( var i = 0; i < t.length; i++ )
        t[i].onclick = getVal;
}

</script>



<body>

<table id="main"><tr>
    <td>1</td>
    <td>2</td>
    <td>3</td>
    <td>4</td>
</tr><tr>
    <td>5</td>
    <td>6</td>
    <td>7</td>
    <td>8</td>
</tr><tr>
    <td>9</td>
    <td>10</td>
    <td>11</td>
    <td>12</td>
</tr></table>

</body>
</html>
мохаммад
источник
2
$(document).ready(function() {
     var customerId
     $("#mytable td").click(function() {
     alert($(this).html());
     });
 });
jithin
источник
2

Рабочий пример: http://jsfiddle.net/0sgLbynd/

<table>
<tr>
    <td>0</td>
    <td class="ms-vb2">1</td>
    <td class="ms-vb2">2</td>
    <td class="ms-vb2">3</td>
    <td class="ms-vb2">4</td>
    <td class="ms-vb2">5</td>
    <td class="ms-vb2">6</td>
</tr>
</table>


$(document).ready(function () {
//alert("sss");
$("td").each(function () {
    //alert($(this).html());
    $(this).html("aaaaaaa");
});
});
Газменд Ходжа
источник