使用jQuery从表中获取特定行

时间:2013-09-05 12:50:27

标签: jquery

我正在尝试根据用户完成的复选框选择从表中的特定行检索数据。

为此,我找到了两种方法eq(rowIndex)nth-child(rowIndex)。但是,它仅在给定绝对值时才有效,而在动态时则无效。

尝试过以下但没有运气:

function getData()
 {
    var chkArr = document.getElementsByName('checkbox');
    var checkedRecord = 0;
    for(var i=0; i<chkArr.length; i++)
    {   
    if(chkArr[i].checked)
    {
              checkedRecord = i;
              $('#summaryTable > tbody  > tr').eq('#checkedRecord').children('td').each(function(j)
            //checkedRecord is the row index here
             {
             //fetch values from td
             }); 
          }
      }  
 }

以下是我的html外观

<table>
<tr>
    <td><input type="text" id="text1"></td>
    <td>
        <select>
            <option value="opt1">Orange</option>
            <option value="opt2">Green</option>
        </select>
    </td>
</tr>
<tr>..</tr>

对此有何建议?

4 个答案:

答案 0 :(得分:1)

你想要这样的东西:

$('#summaryTable > tbody  >  tr').eq(i).children('td')
    .each(function() { ... });

eq的参数必须是数字。

也不需要checkedRecord变量,它与i相同。

答案 1 :(得分:1)

eq方法需要整数值作为参数,但是您将选择器语法传递给此方法。在行上查看您的代码:

$('#summaryTable > tbody  > tr').eq('#checkedRecord')....

您已将上面的checkedRecord变量定义为var checkedRecord = 0;。所以你需要修改那一行成为:

$('#summaryTable > tbody  > tr').eq(checkedRecord)....

答案 2 :(得分:0)

试试这个,

var gridRows = $("#myTable tbody tr");
var qnt = gridRows[i].cells[2].childNodes[0].value;

如果您想要所有行数据,请使用此函数

function GridCount() {
        var grid = $("#myTable tbody");
        var gridRows = $("#myTable tbody tr");
        var gridfootRows = $("#myTable tfoot tr");
        var subTotal = 0;
        var Id;
        var Name;
        for (var i = 0; i < gridRows.length; i++) {
            if (isFireFox()) {
                Id = gridRows[i].cells[0].childNodes[0].innerHTML;
                Name = gridRows[i].cells[1].childNodes[0].innerHTML;
            }
            else {
                Id = gridRows[i].cells[0].innerText;
                Name = gridRows[i].cells[0].innerText;
            }
            var qnt = gridRows[i].cells[2].childNodes[0].value;
            var price = gridRows[i].cells[3].childNodes[0].value;
            var total = parseFloat(price * qnt).toFixed(2);
            gridRows[i].cells[4].childNodes[0].innerHTML = total;
            subTotal = parseFloat(subTotal) + parseFloat(total);
        }

}
function isFireFox() {
   return navigator.appName == "Netscape";
}

答案 3 :(得分:0)

我不确定你要求的是什么,但似乎你想要找到行中的选择值,这些值通过索引对应的复选框对应。这将允许您这样做:

function getData() {
    var rows = $('#summaryTable > tbody  > tr'), //cache rows for performance
        values = []; //array of values to return

    //iterate through all checkboxes
    $('input[type=checkbox]').each(function (i) { 
        if(this.checked) {
            //if checkbox is checked, find select and get value, then add to values array
            values.push(rows.eq(i).find('select').val()); 
        }
    });

    return values;
}