jQuery只返回第一项

And*_*NET 10 jquery jquery-selectors

出于某种奇怪的原因,每当我有一个选择器并期望获得多个项目时,jQuery只返回第一个项目,而不是整个集合.

这是我的HTML:

<a id="reply-424880" class="reply" href="#" rel="nofollow">Reply</a>
<a id="reply-424885" class="reply" href="#" rel="nofollow">Reply</a>
Run Code Online (Sandbox Code Playgroud)

而选择器:

$('.reply').unbind('click').click(function(event) {
 ...
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用FireBug进行调试,但仍然得到相同的结果.使用我的工作,我可以让它工作:

$('a').each(function (index, element) {
            if ($(element).attr('class') == 'reply') {
                $(this).unbind('click').click(function(event) {
                     ...
                });
             }
});
Run Code Online (Sandbox Code Playgroud)

我想使用内置功能而不是我的工作.知道为什么只返回第一个元素?

Jon*_*ske 21

尴尬的是,我也遇到了这个问题,结果证明Chrome似乎有一个类似于$()jquery的函数,它以类似的方式实现了一个选择器逻辑的子集,但缺少一堆函数:

> $
function $(selector, [startNode]) { [Command Line API] }
Run Code Online (Sandbox Code Playgroud)

正确包含jQuery的VS:

> $
function (e,n){return new x.fn.init(e,n,t)} 
Run Code Online (Sandbox Code Playgroud)

所以..是的,事实证明我的脚本标签有点格式错误 - 不足以导致任何错误,它仍然获取jQuery文件,因此网络视图仍然显示它被提取,它只是不被解释为javascript ,因此jQuery缺失,但足够的语法仍然有效,它扔了我多年.

希望这可以在某些时候节省一些时间.

  • 顺便提一下,Chrome还有一个`$$`函数,它返回一个与选择器匹配的元素数组.更多信息[这里](https://developer.chrome.com/devtools/docs/commandline-api#selector_1). (7认同)

And*_*NET 1

将解决方法保留几个月后,我决定尝试查看页面上是否有任何内容导致了问题。

通过排除过程,我能够将错误范围缩小到 jquery.validate.js 文件。由于某种未知的原因,该文件导致 jQuery 仅返回第一个值。我下载了最新版本,选择器现在返回所有匹配的元素。