Jquery eq()使用列名而不是索引

时间:2014-12-09 10:34:16

标签: javascript jquery

我有jQuery来获取表格中的第5列文字并更改文本框的文本

$('textbox').val($(e.target).closest("tr").find('td:eq(4)').text());

然而,让我们说另一个开发人员移动列的索引(是的我可以评论说不要四处移动或使用正确的索引,但我想这是懒惰的方式)然后它会错误地选择错误的列的文本。那么我怎么能改变eq(index)来改为使用静态列名呢?

谢谢

3 个答案:

答案 0 :(得分:4)

给单元格一个类,然后按类选择:

$('textbox').val($(e.target).closest("tr").find('td.myClass').text());

或者使用您在评论中提到的属性:

$('textbox').val($(e.target).closest("tr").find('td[aria-describedby="yourValue"]').text());

答案 1 :(得分:1)

不依赖于任何特定实现(如jqGrid)的替代方法是使用列名保持数组:

var columnNames = [];

$('table').find('th').each (function () {
   columnNames.push($(this).text().trim());
});

然后,您可以使用O(1)操作获取列的索引:

var index = columnNames.indexOf("Inv No");

您可以在现有表达式中使用该索引:

$('textbox').val($(e.target).closest("tr").find('td:eq(' + index + ')').text());

这将使您可以灵活地切换到另一个表/网格插件而无需更改代码!

以下是应用于jqGrid呈现的HTML的示例:

http://jsfiddle.net/fukt548f/1/

答案 2 :(得分:-1)

this may help you
$('textbox').val($(e.target).closest("tr").children().eq(4).text());