由于一些奇怪的原因,每当我有一个选择器并期望获得多个项目时,jQuery只返回第一个项目,而不是整个集合。
这是我的HTML:
<a id="reply-424880" class="reply" href="#" rel="nofollow">Reply</a>
<a id="reply-424885" class="reply" href="#" rel="nofollow">Reply</a>
选择器:
$('.reply').unbind('click').click(function(event) {
...
}
我尝试使用FireBug进行调试,但仍然得到相同的结果。使用我的工作可以让它工作:
$('a').each(function (index, element) {
if ($(element).attr('class') == 'reply') {
$(this).unbind('click').click(function(event) {
...
});
}
});
我想使用内置功能而不是我的工作。知道为什么只返回第一个元素吗?
答案 0 :(得分:20)
尴尬的是,我也遇到了这个问题,结果证明Chrome似乎有一个类似于$()jquery的函数,它以类似的方式实现了一个选择器逻辑的子集,但缺少一堆函数:
> $
function $(selector, [startNode]) { [Command Line API] }
正确包含jQuery的Vs:
> $
function (e,n){return new x.fn.init(e,n,t)}
所以..是的,事实证明我的脚本标签有点格式错误 - 不足以导致任何错误,它仍然获取了jQuery文件,因此网络视图仍然显示它被提取,它只是不是那时解释为javascript,因此缺少jQuery,但足够的语法仍然有效,它让我扔了很长时间。
希望这会在某个时候节省一些时间。
答案 1 :(得分:3)
你所拥有的东西应该已经工作,you can see an example here,这是一个简单的电话:
$('.reply').unbind('click').click(function(event) {
alert('hi there');
});
如果没有为所有这些处理程序执行相同的处理程序,那么您必须在问题之外有一些影响链接的内容。如果您从第一个开始只获得attribute,请确保您的功能内部没有像$(".reply").attr("id")
这样的内容,您应该在处理程序中使用this
,而不是$('.reply').unbind('click').click(function(event) {
alert($('.reply').attr("id")); //alerts "reply-424880" for both
});
。 ll从匹配的第一个元素中获取属性。
$('.reply').unbind('click').click(function(event) {
alert($(this).attr("id")); //alerts "reply-424880" for both
//and use just this.id in this case, no need for jQuery .attr(), like this
//alert(this.id);
});
{{1}}
答案 2 :(得分:1)
在将解决方法保留几个月之后,我决定尝试查看页面上是否有任何导致问题的内容。
通过消除过程,我能够将错误范围缩小到jquery.validate.js文件。由于某些未知原因,此文件导致jQuery仅返回第一个值。我下载了最新版本,选择器现在返回 all 匹配的元素。
答案 3 :(得分:0)
这应该有效但是......
$('.reply').each(function() {
$(this).unbind('click').click(function(event) {
...
});
});