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。

要获取 ID 列表,您可以.map像这样使用:

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 回答