获取for语句中的表行ID

时间:2013-08-16 17:33:50

标签: javascript jquery

我在JavaScript中有这行代码:

for (var row in $('#alertsbody > tr')) {
    . . . 
}

我需要测试行的ID是否与值匹配。但是,

if (row.attr('id') == myRowId) {
    . . .
}

生成" TypeError:row.attr不是函数"错误。

获取行ID的正确方法是什么?

3 个答案:

答案 0 :(得分:2)

不要使用for..in循环来迭代jQuery集合的元素。 for..in遍历对象的所有属性,jQuery集合具有很多属性,其中只有一些属于集合的实际元素。使用jQuery提供的.each()函数 - > http://api.jquery.com/each/

旁注,row中的变量for(row in something)将包含属性名称,而不是属性的值。

答案 1 :(得分:0)

当你编写它时,你可以使用each函数进行迭代,然后在检查id之前JQuery包装每个元素:

$("#alertsbody > tr").each(function(i, tr) {
    if ($(tr).attr('id') == myRowId) {
        //do something
    }
});

但是,考虑到你要做的事情,仅仅获取具有特定id的元素会不会更有意义?

$(myRowId)

您需要迭代多个元素的唯一时间是通过非唯一属性(例如class)进行选择,即使这样,您也可以将其合并到JQuery选择器中:

$("#alertsbody > tr."+myRowClass)

答案 2 :(得分:0)

jQuery选择器返回由jQuery对象包装的元素数组。使用您的代码,row将表示对象的属性,该属性适用于数字属性;但是会打破所有其他属性(见下面为什么这是坏的)。

同样,不应使用以下内容,但使用您的代码,您可以通过缓存选择器来实现in循环结构:

var $tr = $('#alertsbody > tr');
for (var row in $tr) {
    // perform any property validation here
    if (isNaN(row))
       continue;                 // try next property

    // id validation
    if ($tr[row].id == myRowId)
       . . . 
}

警告/更好的选择


这是一个坏主意。这是因为你不应该以这种方式遍历对象,而应该使用.each()迭代jQuery对象。

$tr.each(function(){
   if(this.id == myRowId)
      ...
})

替代


一些替代方法是完全跳过循环并按id选择行,例如($('#myRowId')$('tr#myRowId') 但是,tr不是必需的,因为只应该有一个id每个HTML页面)并执行一些操作。或者,如果您已经有一些循环构造或需要替代检查机制,则可以使用.is()函数:

var domElement = document.getElementById('myRowId');
var $jqElement = $('#myRowId');

$tr.each(function(){
   var $this = $(this);
   if( $this.is('#myRowId') )
      ...
   if( $this.is( domElement ) )
      ...
   if( $this.is( $jqElement ) )
});