W3Schools jQuery测验

时间:2011-04-19 00:37:54

标签: jquery jquery-selectors

W3Schools网站上发布了一个jQuery测验......

http://www.w3schools.com/quiztest/quiztest.asp?qtest=jQuery

问题#19如下,

  

查看以下jQuery选择器:$(“div #intro .head”)。

     

它选择了什么?

     

一个。 id =“head”的第一个元素在任何div元素中,class =“intro”

     

B中。所有元素的class =“head”在第一个div元素中,id =“intro”

     

℃。所有div元素的id =“intro”或class =“head”

我通过选择答案B得到了正确的答案。

我的问题与答案B的措辞有关。

不应该从答案中删除“第一”这个词吗?

  

B中。在div元素中具有class =“head”的所有元素,id =“intro”

ID被定义为“元素的唯一标识符”,因此不能真正理解为什么他们会引用带有id的第一个 div元素=前奏“

我不相信它故意试图变得棘手,因为这个测验中的所有其他问题都非常简单。

谢谢你的想法。


修改

我向W3Schools报告了这个错误,并将他们引导到了这个主题。


编辑#2:

这是来自同一测验的另一个问题。

Another questionable jQuery Quiz answer at W3Schools

2 个答案:

答案 0 :(得分:15)

你是对的,第一个语言可以(应该)从所有选择中删除。

根据HTML 4.01 Spec

  

此属性为其指定名称   元件。此名称在a中必须是唯一的   文档。

此外,根据jQuery documentation for the id selector

  

选择带有的单个元素   给定id属性

在引擎盖下,选择器使用document.getElementById("...")。有趣的是,此函数的the specification表示:

  

如果超过,则不定义行为   一个元素有此ID。

因此,假设您有两个具有相同id的元素,则该函数的结果是不可预测的并且特定于浏览器。

Sidenote :W3Schools不被视为学习JavaScript / jQuery的最佳场所之一。一个备受推崇的JavaScript替代品是MDC's JavaScript Guide。对于jQuery,请查看tutorials页面。

答案 1 :(得分:1)

如果多个元素具有此ID,则document.getElementById(“...”)的行为确实是未定义的。

然而,正如w3schools网站一直试图指出的那样,jQuery在这种情况下的行为是明确定义的。如果多个元素具有此ID,则将选择 first

没有人会宽恕多个具有特定身份证明的元素;这仍然是违反规则的。但是,与getElementById不同,如果此规则被破坏,jQuery会有特定的反应。