7
<div id="cardSlots">
<div class="ui-droppable" tabindex="-1" id="card1">one</div>
<div class="ui-droppable" tabindex="-1" id="card2">two</div>
<div class="ui-droppable" tabindex="-1">three</div>
<div class="ui-droppable" tabindex="-1">four</div>
</div>

<script>
     $(".ui-droppable").each(function () {     
       if($(this).attr("id").length>0)
       {
       alert('here');
       }
    });
</script>

クラスをループしようとしていますが、問題はそのページで card1 と card2 の ID が重複していることです。しかし、上記のコードは機能しているようですが、以下のエラーが表示されます。

Uncaught Type Error: Cannot read property 'length' of undefined

そこにあるループからIDを取得しようとしています。

4

6 に答える 6

13

属性セレクター を使用selector[attribute]して、ID を持つ要素のみを取得します

$('.myClass[id]')   // Get .myClass elements that have ID attribute

あなたの場合:

$('.ui-droppable[id]').each(function(){
   alert( this.id );
});

jsFiddle デモ

于 2012-06-21T11:44:50.637 に答える
12

if(this.id)は、あなたが必要とすることすべてです。


なぜこれが機能するのですか?

要素に ID がある場合、値は空でない文字列になり、常に に評価されtrueます。
ID がない場合、値は空の文字列で、評価結果は になりfalseます。


そこにあるループからIDを取得しようとしています。

.mapID のリストを取得するには、次のように使用できます。

var ids = $(".ui-droppable").map(function() {     
    return this.id ? this.id : null;
}).get();

または、 Roko が答えで提案しているセレクターを使用します。

于 2012-06-21T11:41:42.667 に答える
3

デモ http://jsfiddle.net/QRv6d/13/

API リンク: http://api.jquery.com/prop/

これを試してください、これは役立つはずです

コード

   $(".ui-droppable").each(function () { 

       if($(this).prop("id").length > 0)
       {
       alert('here');
       }
    });​
于 2012-06-21T11:40:14.967 に答える
2

id属性がない場合、attrメソッドは を返しundefinedます。書くだけ:

if($(this).attr("id"))
于 2012-06-21T11:39:55.973 に答える
1
if(typeof $(this).attr("id") != 'undefined')
于 2012-06-21T11:46:02.027 に答える
-2
var $this = $(this);
if (typeof $this.attr("id") != "undefined" && $this.attr("id").length > 0) {
    ...
}

$(this)複数回使用する場合は、一度検索して、結果の jQuery オブジェクトをローカル変数に入れることをお勧めします。

于 2012-06-21T11:40:08.517 に答える