jQuery('#id'。)长度总是返回1吗?

时间:2013-07-17 14:54:44

标签: jquery

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

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

<div id="1">foo</div>
<div id="1">foo</div>

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

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

感谢您的帮助

7 个答案:

答案 0 :(得分:12)

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

它不是jQuery或javascript限制,而是HTML。检查7.5.2 Element identifiers: the id and class attributes是否有关于此的官方消息。

答案 1 :(得分:7)

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

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

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

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

答案 2 :(得分:3)

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

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

答案 3 :(得分:2)

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

答案 4 :(得分:2)

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

检查the jQuery documentation for the ID Selector (“#id”)

  

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

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

来自该链接的说明解释了无效页面的行为:

  

每个id值只能在文档中使用一次。如果超过   一个元素已分配相同的ID,使用该ID的查询   只会选择DOM中第一个匹配的元素。此行为   但是,不应该依赖;包含多个文档的文档   使用相同ID的元素无效。

答案 5 :(得分:1)

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

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

答案 6 :(得分:0)

我有这个错误,我写了

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

为我解决了这个问题。