jQuery(’#id’)。length总是返回1吗?

我无法弄清楚为什么.min在计算页面中具有相同id的元素时似乎总是返回1。 我知道在html文档中应该只有具有唯一html id的元素,但在我正在处理的项目中,用户可能会无意中添加重复项。

那么,在计算元素id时,jQuery总是返回1是正常的行为吗?

foo
foo
jQuery(function(){ alert(jQuery('#1').length); // returns 1 });

我在这里建立了一个例子: http : //jsfiddle.net/eSNZx/

谢谢你的帮助

返回0或1.具有相同id的多个元素无效。

它不是jQuery或javascript限制,而是HTML。 检查7.5.2元素标识符:关于该官方字的id和class属性 。

是的,这很正常。 但是,您可以使用属性equals selector来解决它。

 $("[id=1]").length 

显然,拥有非唯一ID是无效的。 由于您正在处理用户输入,因此如果您没有阻止它,则可能会发生。

或者,您可以使用.children(),. find(),. siblings()和/或.filter()来获得相同的效果。 或者甚至可能是更复杂的选择器,例如#parent #1

因为标识符本质上是唯一的; 幸运的是,jQuery在大多数情况下通过选择第一个也是唯一一个来优雅地处理这个问题。

可以添加多个具有相同ID的元素,但这样做是无意义的,并且应该非常期望这种“冲突”行为。

由于ID应该是唯一的,这可能是浏览器执行此操作,而不是jQuery。 document.getElementById('1')只返回零个或一个元素。

是的,总是最多一个。 但它适用于(无效)页面,其中有多个具有相同ID的元素。 但要避免这种情况,因为它可能会产生意想不到的结果(见下文)。

检查ID Selector (“#id”)jQuery文档

ID Selector (“#id”)
描述:选择具有给定id属性的单个元素。

使用id选择器作为参数调用jQuery() (或$() )将返回包含零个或一个DOM元素集合的jQuery对象

该链接中的注释说明了无效页面的行为:

每个id值只能在文档中使用一次。 如果为多个元素分配了相同的ID,则使用该ID的查询将仅选择DOM中的第一个匹配元素。 但是, 不应依赖此行为; 具有多个使用相同ID的元素的文档无效。

这是因为你的jQuery选择器只返回一个id为1元素。 这是因为id应该是唯一的。 尝试将id更改为类,因为这个小提示显示并使用jQuery类选择器进行选择。

这是一个更新的小提琴: http : //jsfiddle.net/eSNZx/

我有这个错误,我写了

 $('div[name=1]').length 

这解决了我的问题。