$(“#id”)只选择第一个元素,但$(“div#id”)选择两者?

时间:2013-01-19 03:02:33

标签: jquery css-selectors

<!DOCTYPE HTML>

<script src='http://code.jquery.com/jquery-latest.min.js'></script>

<body>

<div id='mydiv'>Hello, buddy.</div>
<div id='mydiv'>Hello, friend.</div>

</body>

在JQuery中,如果我$('#mydiv')它将仅选择第一个div,但如果我$('div#mydiv')它将选择所有这些。

我理解指定元素和id,它将阻止选择具有相同id但不是div的其他元素。

这不是一个错误吗?不应该$('#mydiv')选择所有ID为“mydiv&#39;”

的元素

3 个答案:

答案 0 :(得分:4)

它根本不是一个错误... ID(#myId)不应该在多个实例中使用。这就是为什么我们有课程(.myClasses)。

因此,您可以根据需要使用类。但是每个HTML页面的ID始终是唯一的。您可能会在许多不同的页面中显示一个ID,但始终作为唯一ID。

答案 1 :(得分:4)

jQuery的解释

此外,在您的情况下,jQuery应该只选择一个元素,并选择ID的第一个元素。由于您还提供了div,因此它使用getElementsByTagName,并将该属性与ID匹配。因此,它返回所有实例。如果我错了,请纠正我。

建议

根据网络标准,id属性必须是唯一的。因此,每个元素都应该有唯一的ID。如果你想为多个元素使用东西,你就有了类。

此外,如果您有多个ID,您的HTML将无法验证。

此外,来自XHTML 1.0 Spec

  

在XML中,片段标识符是   类型ID,只能有一个   每个类型ID的单个属性   元件。因此,在XHTML 1.0中   id属性定义为类型   ID。为了确保XHTML 1.0   文档是结构良好的XML   文档,XHTML 1.0文档必须   定义时使用id属性   元素上的片段标识符   以上所列。请参阅HTML   兼容性指南   有关确保此类锚点的信息   在服务时向后兼容   XHTML文档作为媒体类型   text / html的。

答案 2 :(得分:2)

#mydiv可能已针对使用getElementById进行了优化,{{1}}中将其描述为:

  

如果多个元素具有此ID,则未定义行为。

通常会返回具有此ID的第一个元素。