JavaScript に次のコード行があります。
for (var row in $('#alertsbody > tr')) {
. . .
}
行の ID が値と一致することをテストする必要があります。でも、
if (row.attr('id') == myRowId) {
. . .
}
「TypeError: row.attr は関数ではありません」というエラーが発生します。
行の ID を取得する正しい方法は何ですか?
JavaScript に次のコード行があります。
for (var row in $('#alertsbody > tr')) {
. . .
}
行の ID が値と一致することをテストする必要があります。でも、
if (row.attr('id') == myRowId) {
. . .
}
「TypeError: row.attr は関数ではありません」というエラーが発生します。
行の ID を取得する正しい方法は何ですか?
あなたが書いているように、each
関数を使用して反復し、ID をチェックする前に JQuery で各要素をラップすることができます。
$("#alertsbody > tr").each(function(i, tr) {
if ($(tr).attr('id') == myRowId) {
//do something
}
});
しかし、あなたがやろうとしていることを考えると、特定の ID を持つ要素を取得する方が理にかなっているでしょうか?
$(myRowId)
複数の要素を反復する必要があるのは、 などの一意でない属性で選択するclass
場合だけであり、その場合でも、それを JQuery セレクターに組み込むことができます。
$("#alertsbody > tr."+myRowClass)
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 ) )
});