单击按钮获取表行的内容


87

我需要提取表中每列的详细信息。例如,列“名称/编号”。

  • 该表包含多个地址
  • 每行的最后一列都有一个按钮,使用户可以选择列出的地址。

问题:我的代码仅选择<td>具有类的第一个nr。我该如何工作?

这是jQuery位:

$(".use-address").click(function() {
    var id = $("#choose-address-table").find(".nr:first").text();
    $("#resultas").append(id); // Testing: append the contents of the td to a div
});

表:

<table id="choose-address-table" class="ui-widget ui-widget-content">
    <thead>
        <tr class="ui-widget-header ">
            <th>Name/Nr.</th>
            <th>Street</th>
            <th>Town</th>
            <th>Postcode</th>
            <th>Country</th>
            <th>Options</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td class="nr"><span>50</span>
            </td>
            <td>Some Street 1</td>
            <td>Leeds</td>
            <td>L0 0XX</td>
            <td>United Kingdom</td>
            <td>
                <button type="button" class="use-address" />
            </td>
        </tr>
        <tr>
            <td class="nr">49</td>
            <td>Some Street 2</td>
            <td>Lancaster</td>
            <td>L0 0XX</td>
            <td>United Kingdom</td>
            <td>
                <button type="button" class="use-address" />
            </td>
        </tr>
    </tbody>
</table>

3
这是一个完整的现场演示教程,内容涉及如何获取表格单元格TD值codepedia.info/jquery-get-table-cell-td-value-div
Satinder singh's

Answers:


260

练习的目的是找到包含信息的行。当我们到达那里时,我们可以轻松提取所需的信息。

回答

$(".use-address").click(function() {
    var $item = $(this).closest("tr")   // Finds the closest row <tr> 
                       .find(".nr")     // Gets a descendent with class="nr"
                       .text();         // Retrieves the text within <td>

    $("#resultas").append($item);       // Outputs the answer
});

查看演示

现在,让我们集中讨论在这种情况下的一些常见问题。

如何找到最接近的行?

使用.closest()

var $row = $(this).closest("tr");

使用.parent()

您也可以使用.parent()方法将DOM树上移。这只是有时与.prev()和一起使用的替代方法.next()

var $row = $(this).parent()             // Moves up from <button> to <td>
                  .parent();            // Moves up from <td> to <tr>

获取所有表单元格<td>

因此,我们有了$row并且我们想输出表格单元格文本:

var $row = $(this).closest("tr"),       // Finds the closest row <tr> 
    $tds = $row.find("td");             // Finds all children <td> elements

$.each($tds, function() {               // Visits every single <td> element
    console.log($(this).text());        // Prints out the text within the <td>
});

查看演示

获得特定<td>

与上一个相似,但是我们可以指定子<td>元素的索引。

var $row = $(this).closest("tr"),        // Finds the closest row <tr> 
    $tds = $row.find("td:nth-child(2)"); // Finds the 2nd <td> element

$.each($tds, function() {                // Visits every single <td> element
    console.log($(this).text());         // Prints out the text within the <td>
});

查看演示

有用的方法

  • .closest() -获取与选择器匹配的第一个元素
  • .parent() -获取当前匹配元素集中每个元素的父元素
  • .parents() -获取当前匹配元素集中每个元素的祖先
  • .children() -获取匹配元素集中每个元素的子元素
  • .siblings() -获取匹配元素集中每个元素的同级
  • .find() -获取当前匹配元素集中每个元素的后代
  • .next() -获得匹配元素集中每个元素的紧随其后的同级
  • .prev() -获取匹配元素集中每个元素的前一个同级

如果我有一个弹出窗口并且想要从页面访问表并删除行怎么办?我尝试了一种方法,但对我不起作用:/
Si8 2014年

你可以准备一个jsFiddle吗?
martynas 2014年

1
在处理动态ID值时,我遇到类似的问题。请看看stackoverflow.com/questions/25772554/...
Sanjeev4evr

5
不知道邓诺如何回答这个问题。优秀的提示!只需添加即可,在获取特定行$(this).closest(“ tr”)。find(“ td:eq(2)”)。html();之后,始终可以像这样获得列值。您将获得2号栏。干杯!
Matias

1
我仍然会不时使用此答案。确实有帮助,并且进行了一些小的修改,基本上可以在每个表中使用!
Mese

11

试试这个:

$(".use-address").click(function() {
   $(this).closest('tr').find('td').each(function() {
        var textval = $(this).text(); // this will be the text of each <td>
   });
});

这将找到tr当前单击的按钮中最接近的(在DOM中向上移动),然后循环每个按钮td-您可能要使用值创建字符串/数组。

这里的例子

在此处使用数组示例获取完整地址



4
function useAdress () { 
var id = $("#choose-address-table").find(".nr:first").text();
alert (id);
$("#resultas").append(id); // Testing: append the contents of the td to a div
};

然后在您的按钮上:

onclick="useAdress()"

1
这与问题中的代码具有相同的问题-无论单击哪个行的按钮,它始终从表的第一行获取ID。
dgvid

3

选择器".nr:first"专门"nr"在所选表元素中寻找具有类的第一个元素,并且仅第一个元素。如果您调用.find(".nr"),则将获得表中具有class的所有元素"nr"。一旦拥有所有这些元素,就可以使用.each方法对其进行迭代。例如:

$(".use-address").click(function() {
    $("#choose-address-table").find(".nr").each(function(i, nrElt) {
        var id = nrElt.text();
        $("#resultas").append("<p>" + id + "</p>"); // Testing: append the contents of the td to a div
    });
});

但是,这将使您获得表中的所有td.nr元素,而不仅仅是单击的行中的元素。要将选择范围进一步限制到包含单击按钮的行,请使用.closest方法,如下所示:

$(".use-address").click(function() {
    $(this).closest("tr").find(".nr").each(function(i, nrElt) {
        var id = nrElt.text();
        $("#resultas").append("<p>" + id + "</p>"); // Testing: append the contents of the td to a div
    });
});

0

使用jQuery在行中查找ID为id的元素

$(document).ready(function () {
$("button").click(function() {
    //find content of different elements inside a row.
    var nameTxt = $(this).closest('tr').find('.name').text();
    var emailTxt = $(this).closest('tr').find('.email').text();
    //assign above variables text1,text2 values to other elements.
    $("#name").val( nameTxt );
    $("#email").val( emailTxt );
    });
});

0
var values = [];
var count = 0;
$("#tblName").on("click", "tbody tr", function (event) {
   $(this).find("td").each(function () {
       values[count] = $(this).text();
       count++;
    });
});

现在values数组包含该行的所有单元格值,可以像values [0]一样使用被单击行的第一个单元格值


0

这是代表简单示例的完整代码

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

</head>
<body>

<div class="container">
  <h2>Striped Rows</h2>
  <p>The .table-striped class adds zebra-stripes to a table:</p>            
  <table class="table table-striped">
    <thead>
      <tr>
        <th>Firstname</th>
        <th>Lastname</th>
        <th>Email</th>

      </tr>
    </thead>
    <tbody>
      <tr>
        <td>John</td>
        <td>Doe</td>
        <td>john@example.com</td>
        <td>click</td>
      </tr>
      <tr>
        <td>Mary</td>
        <td>Moe</td>
        <td>mary@example.com</td>
        <td>click</td>
      </tr>
      <tr>
        <td>July</td>
        <td>Dooley</td>
        <td>july@example.com</td>
        <td>click</td>
      </tr>

    </tbody>
  </table>
  <script>
  $(document).ready(function(){
  $("div").delegate("table tbody tr td:nth-child(4)", "click", function(){
  var $row = $(this).closest("tr"),        // Finds the closest row <tr> 
    $tds = $row.find("td:nth-child(2)");
     $.each($tds, function() {
        console.log($(this).text());
        var x = $(this).text();
        alert(x);
    });
    });
});
  </script>
</div>

</body>
</html>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.