<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。
答案 0 :(得分:13)
使用属性选择器 selector[attribute]
仅获取具有ID的元素
$('.myClass[id]') // Get .myClass elements that have ID attribute
在你的情况下:
$('.ui-droppable[id]').each(function(){
alert( this.id );
});
答案 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对象放在局部变量中。