4

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

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

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

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

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

谢谢你的帮助

4

7 回答 7

12

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

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

于 2013-07-17T14:55:52.223 回答
7

是的,这很正常。但是,您可以通过使用属性等于选择器来解决它。

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

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

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

于 2013-07-17T15:00:51.747 回答
3

Because identifiers are intended to be unique, by their very nature; luckily, jQuery handles this gracefully, and perfectly reasonably, in most cases by selecting the first and only one.

You can add more than one element with the same id, but it makes nonsense to do so, and such kinds of 'conflicting' behaviour should be quite expected.

于 2013-07-17T14:56:21.187 回答
2

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

于 2013-07-17T14:57:11.173 回答
2

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

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

ID Selector (“#id”)
      描述:选择具有给定 id 属性的单个元素。使用 id 选择器作为参数

      调用jQuery()(或)将返回一个 jQuery 对象,其中包含零个或一个 DOM 元素的集合$()

该链接的注释解释了无效页面的行为:

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

于 2013-07-17T14:57:49.117 回答
1

这是因为您的 jQuery 选择器只返回一个 id 为1. 这是因为 id 应该是唯一的。尝试将 id 更改为 class,就像这个小提琴显示的那样,并使用 jQuery 类选择器进行选择。

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

于 2013-07-17T14:57:36.550 回答
0

我有那个错误,我写了

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

这为我解决了这个问题。

于 2014-12-07T16:26:14.403 回答