jQuery选择器 - 奇怪的行为

时间:2014-01-22 18:02:26

标签: javascript jquery html jquery-selectors

我发现了jQuery选择器的奇怪行为。当页面包含一些不具有唯一ID的元素时,jQuery会为相同的选择器返回不同的结果:

HTML:

<button id='btn1'>Button 1</button>
<button id='btn1'>Button 2</button>
<button id='btn3'>Button 3</button>

JS:

$('#btn1')        - returns one element: button1
$('#btn1 ')       - returns two elements: button1, button2
$('#btn1, #btn3') - returns three elements: button1, button2, button3

我想知道 - 这是jQuery错误还是有逻辑解释?

Demo

2 个答案:

答案 0 :(得分:1)

你是对的,这似乎是奇怪的行为,但它可能不是由jQuery开发人员直接解决,正是因为HTML标准需要ID属性来唯一标识元素。您不应该认为这种行为是一致的。

现在关于修复它的相关问题,至少对我来说如何优先处理无效边缘情况是很有意思的。也许在对所有选择器进行消毒时会产生性能影响,以防止误用时出现不可预测的结果。

为jQuery提供动力的选择器引擎被称为Sizzle,因为你想深入研究它产生输出的方式和原因,还有一套单元测试(用QUnit框架编写)。

答案 1 :(得分:0)

因为这就是浏览器选择器的工作方式:

http://i.imgur.com/mGNJHe9.png

这是按预期工作的;您的代码应该更正为没有重复的ID。