我想增加我对jQuery的理解。请考虑下面的代码。使用jQuery集合
if ($('.myClass').data('id') == '123') {
}
这是如何工作的?它看起来很简单,直到你明白$()
返回一组元素。那么上面的代码究竟做了什么?如何比较这样的元素的集合的data-id属性值?
(我知道我可以使用each()
集合中明确测试的每个元素我的问题是关于什么上面的代码一样。)
我想增加我对jQuery的理解。请考虑下面的代码。使用jQuery集合
if ($('.myClass').data('id') == '123') {
}
这是如何工作的?它看起来很简单,直到你明白$()
返回一组元素。那么上面的代码究竟做了什么?如何比较这样的元素的集合的data-id属性值?
(我知道我可以使用each()
集合中明确测试的每个元素我的问题是关于什么上面的代码一样。)
.data('id')
返回集合中的第一个项目的价值,但.data('id','xyz')
将设定值集合中的所有项目 - 许多相同的行为,其它的jQuery方法,如.html()
,.text()
等
它可能似乎没有什么意义,只是在类似的if
声明中测试第一个,但对于知道只有一个元素的情况,例如当您的选择器是id时,或者在内部使用$(this).data('id')
时更有意义事件处理程序或其他。
如果你问如何测试集合中的所有项目是否有一个特定的数据值,你可以这样做:
var $col = $('.myClass');
if ($col.length === $col.filter(function(){return $(this).data('id') === '123';}).length) {
// do something
}
或者,如果你只是想知道,如果至少一个具有数据值:
if ($('.myClass').filter(function(){return $(this).data('id') === '123';}).length > 0) {
// do something
}
我更新了我的问题以使其更清晰好,对集合中的第一项进行操作很酷,不仅易于理解,而且表现完全符合我的愿望它来。 –
您可以使用jQuery。每() - http://api.jquery.com/jQuery.each/
例在注释中,因为stackoverflow不喜欢jsFiddle那么多。
http://jsfiddle.net/ByUeE/ – daniel
对不起,我猜在我的问题的措辞中有些含糊不清。我已经更新了它,以便更清楚 –
我相信如果你试图通过jquery函数获取值,它将返回集合中第一个项目的值。例如,如果您有:
<div class='1'></div>
<div class='2'></div>
<div class='3'></div>
并运行:
$('div').attr('class');
它将返回 “1”。我不知道这是否通过所有jQuery函数是统一的,但这是预期的行为。
'.data('id')'返回集合中第一个项目的值。您是否在问如何测试集合中的_all_项是否具有该特定数据值? – nnnnnn
@nnnnnn + 1,但我认为OP(正确)评论说它不清楚从[documentation](http://api.jquery.com/data/)data'(obj)'返回值为第一个匹配的元素。 –
不,我会问,如果这是我想知道的。所以也许你在评论的第一部分回答了这个问题。 –