Jquery - 选择具有特定类的所有tr中的td值

9

我有一张表格

<table>
       <tr class="PO1"></tr>
       <tr class="PO2"></tr>
       <tr class="PO3"></tr>
</table>

我如何循环遍历所有类为"PO1"的元素,并获取每个'td'元素的值?
$("table#id tr .PO1").each(function(i)
{
    // how to get the td values??
});
4个回答

11
var values = $('table tr.PO1 td').map(function(_, td) {
    return $(td).text();
}).get();

这只会创建一个包含每个td的文本内容的数组。使用映射/对象可能是更好的选择:

var values = $('table tr.PO1 td').map(function(index, td) {
    var ret = { };

    ret[ index ] = $(td).text();
    return ret;
}).get();

@Bhaskar:如果这些 td 节点具有唯一的类/ID/属性可用作键,那么地图会更加表现力。如果没有,则索引可能是唯一的识别方式。 - jAndy
你好,如果我想将所有td值放入一个对象中,也就是不同tr中的所有值都应该分别进入不同的对象。我该怎么做?谢谢。 - Bhaskar
$("#tblPurchaseOrders tr.PO1").map(function(index, tr) { var lines = $(tr + " td").map(function(ind, td) { var ret = {}; ret[ind] = $(td).text(); return ret; }).get(); }); - Bhaskar
@wewals:仅将值映射到数组中是非信息化的。特别是当OP只使用类名抓取'tds'时,原始索引就会丢失。 - jAndy
将值放入数组中与将其放入数组内的对象中一样具有信息量。在数组示例中,数组索引是选择器找到节点的索引(类似于eq(index))。在数组内部的对象中,对象中的键是选择器找到节点的索引。两种方式都不多也不少地提供了相同的信息量,没有丢失任何信息。 - wewals
显示剩余4条评论

3

在 .P01 前面的空格是导致您当前代码出错的原因。

$("tr.PO1 td").each(function(i){
    $(this).text()
});

哈哈,那是因为它是PO1而不是P01。o和零(0)的区别。我已经更新了答案代码。 - wewals

1

注意:我删除了.PO1前面的空格,因为您的tr具有P01类。

$("table#id tr.PO1").each(function(i)
{
    $(this).find("td").innerHTMl() //for example
});

0
$("table#id tr.PO1").each(function(i)
{
    i.children('td').each(function(tdEL) {
        // tdEl.val();
    });
});

请注意我在tr和.PO1之间删除的空格。在您的情况下,它将尝试查找每个具有类.PO1的子元素的tr。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接