Javascript 从所选行获取第三个属性

Javascript 从所选行获取第三个属性,javascript,jquery,Javascript,Jquery,获取表行元素的最佳方法是什么? 我有这个网格,它是一个动态添加的网格。每个td都有class='dxgv' 第一列是一个可选列,其中包含行的id,但我需要在客户端知道所选行的第三个属性。(第二节,惩罚) 我想我可以做这样的事情: var td = $(".dxgv").find("td:eq(3)").val(); $('tr:has(input:checked) td:eq(2)').text(); 我会得到这个值,但它不起作用 我尝试了答案,但我无法解决问题。 例如,如果我使用 v

获取表行元素的最佳方法是什么? 我有这个网格,它是一个动态添加的网格。每个
td
都有class='dxgv'

第一列是一个可选列,其中包含行的id,但我需要在客户端知道所选行的第三个属性。(第二节,惩罚)

我想我可以做这样的事情:

 var td = $(".dxgv").find("td:eq(3)").val();
$('tr:has(input:checked) td:eq(2)').text();
我会得到这个值,但它不起作用

我尝试了答案,但我无法解决问题。 例如,如果我使用

 var ee = $('tr:has(input:checked) td:eq(3)').text();
 var td = $(".dxgv:eq(2)").text();
 console.log('Textbox value at row ' + i + ': ' + td);
 console.log('ee value at row ' + i + ': ' + ee);
我明白了:
除非您有某种输入元素,
.val()
将无法工作。您可以使用
.html()
.text()
代替:

var td = $(".dxgv").eq(2).text(); // note .eq(2), because the function is zero-based.

您的JQuery逻辑有点不正确,但几乎没有

 var td = $(".dxgv").find("td:eq(3)").val();
上面使用的代码片段告诉浏览器在类为
.dxgv
的元素中查找第三个
元素。但根据您提供的屏幕截图,问题显而易见:

  • 它是
    本身拥有的类
  • 该单元格是第三个单元格(索引为
    2
    ,而不是
    3
因此,您需要使用此选择器:

var td = $(".dxgv").eq(2).text();
这些变化:

  • 使用
    .eq(2)
    过滤当前选择,以便获得第三个
    .dxgv
    元素。记住JS使用了一个从零开始的索引(第三个元素的索引为
    2
  • 使用
    .text()
    访问元素的文本内容
请参见概念验证示例:

$('button')。在('click',function()上{
var td=$('.dxgv').eq(2).text();
console.log(td);
});

24/04/2018
偏见

单击以从第三个单元格获取文本
您几乎是对的,但有一些小错误:

1)
.find()
获取作为所选内容子项的元素。您的tds是选择项,并且没有子项,因此这将找不到任何内容。相反,您需要直接从集合中选择第三个元素

2)
.val()
从文本框等表单字段获取值。要从非表单元素(如td)获取值,需要使用
.text()

3)
eq()
使用零索引,因此要获取第三个元素,实际上需要请求元素
2

$(函数(){
var td=$(“.dxgv:eq(2)”).text();
console.log(td);
});

第一
第二
第三
第四
第五

这是因为jQuery的
find()
看起来在您已经选择的元素内部。因此,您给出的代码在每个
.dxgv
中查找第四个元素(第一个元素的索引为0)
td
,该元素不存在。 此外,由于它不是一个
输入
元素,因此需要的是内部文本,而不是其值

您可能正在寻找类似以下内容:

 var td = $(".dxgv").find("td:eq(3)").val();
$('tr:has(input:checked) td:eq(2)').text();
这将选择每个内部有选中的
输入的
tr
,然后从中选择第三个
td


请注意,
text()
从匹配的每个元素中获取文本,并将它们组合成一个字符串,因此如果您希望支持多行选择,则需要使用jQuery函数将它们逐个添加到数组中。

.val()不会返回任何内容,因为td不是表单元素。查看已发布的所有其他答案…@ADyson fair point,我相应地更新了我的答案。由于某种原因,我在写我的答案时没有看到其他答案。没问题。现在看起来不错。对在行中添加限制搜索的复选框进行投票,其他人没有提到。我已经编辑了这个问题,请您看一看。@Kar如果您不共享您的标记并创建MCVE,我们真的无能为力。请参阅和。我已经编辑了这个问题,请您看一看。@Kar您何时何地运行代码来打印这些控制台值?从我的答案中的可运行代码段可以看出,我使用的代码确实有效。上下文就是一切……也许您是在创建表行之前运行此代码,或者其他什么?您的问题不清楚页面是如何格式化的,以及是什么触发了获取文本的逻辑。请更新您的问题,以包含重现问题所需的最少代码。见和。