如何检查div是否有id?

时间:2012-06-21 11:38:30

标签: javascript jquery

<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。

6 个答案:

答案 0 :(得分:13)

使用属性选择器 selector[attribute]仅获取具有ID的元素

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

在你的情况下:

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

jsFiddle demo

答案 1 :(得分:12)

if(this.id)就是你所需要的。


为什么会这样?

如果元素具有ID,则该值将为非空字符串,其总是计算为true
如果它没有ID,则该值为空字符串,其值为false


  

我正试图从循环中获取ID。

要获取ID列表,您可以使用.map,如下所示:

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

或使用选择器Roko suggests in his answer

答案 2 :(得分:3)

演示 http://jsfiddle.net/QRv6d/13/

APi链接:http://api.jquery.com/prop/

请试试这个,这应该有帮助

<强>码

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

       if($(this).prop("id").length > 0)
       {
       alert('here');
       }
    });​

答案 3 :(得分:2)

如果没有id属性attr方法将返回undefined。只需写下:

if($(this).attr("id"))

答案 4 :(得分:1)

if(typeof $(this).attr("id") != 'undefined')

答案 5 :(得分:-2)

var $this = $(this);
if (typeof $this.attr("id") != "undefined" && $this.attr("id").length > 0) {
    ...
}

如果你不止一次使用$(this),建议找一次,并将生成的jQuery对象放在局部变量中。