-1

JavaScript に次のコード行があります。

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

行の ID が値と一致することをテストする必要があります。でも、

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

「TypeError: row.attr は関数ではありません」というエラーが発生します。

行の ID を取得する正しい方法は何ですか?

4

3 に答える 3

0

あなたが書いているように、each関数を使用して反復し、ID をチェックする前に JQuery で各要素をラップすることができます。

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

しかし、あなたがやろうとしていることを考えると、特定の ID を持つ要素を取得する方が理にかなっているでしょうか?

$(myRowId)

複数の要素を反復する必要があるのは、 などの一意でない属性で選択するclass場合だけであり、その場合でも、それを JQuery セレクターに組み込むことができます。

$("#alertsbody > tr."+myRowClass)
于 2013-08-16T17:39:02.493 に答える
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)
       . . . 
}

警告/より良い代替手段


これは悪い考えです。これは、この方法でオブジェクトをループしてはならず、代わりに を使用して jQuery オブジェクトを反復処理する必要があるためです.each()

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


いくつかの代替手段は、ループを完全にスキップして行を選択するidことです。または、既に何らかのループ構造が配置されている場合、または別のチェック メカニズムが必要な場合は、次の関数を使用できます。$('#myRowId')$('tr#myRowId').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 ) )
});
于 2013-08-16T17:44:50.860 に答える