jquery 选择器混淆 - $ ('div p' ) vs $ ('div>p' )

标签 jquery jquery-selectors

我正在尝试学习 jquery 并有一个问题 -

页面上的 div 元素看起来像 -

<div id ="1">
    <p id="first"> one 
        <p id="second"> one.one 
            <p id="third"> one.one.one </p>
        </p>
    </p>
</div>

下面的两个选择器都给了我相同的结果 -

  $('div p').css({'background-color' : 'blue'}); 

  $('div>p').css({'background-color' : 'blue'});

第二个选择器不应该只返回第一个 <p> <div> 的标签元素?

最佳答案

$('div p')选择全部 <p> <div> 的后代标签.

$('div>p') 选择<p> <div> 的直接子标签.

<小时/>

您的代码中发生的事情是自结束 </p> 以来发生的标签是可选的,浏览器将您的 HTML 读取为 3 <p> (实际上是 5 个,因为最后 2 个结束标签被“误读”)都是同级标签。

所以,它被解读为:

<div id ="1">
    <p id="first"> one</p> 
    <p id="second"> one.one</p>
    <p id="third"> one.one.one</p>
    <p></p>
    <p></p>
</div>

这就是为什么它们都变成蓝色的原因。 $('div>p')与它们全部匹配,因为它们都是 <div> 的直接子代。 (或者浏览器是这么认为的)。

演示:http://jsfiddle.net/wP7uD/

打开浏览器的开发工具并检查 DOM,您会看到有 5 <p>标签。

这个寓意:你不能拥有 <p>标签为 <p> 的子级标签。

<小时/>

W3C 规范 <p>标签:http://www.w3.org/TR/html-markup/p.html

关于jquery 选择器混淆 - $ ('div p' ) vs $ ('div>p' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16022494/

相关文章:

javascript - 我如何阅读这个功能?

jQuery新手: how to update radio buttons values in my case?

jquery - 用变量替换名称属性 - JQUERY

javascript - 如何在Sharepoint应用程序部分(即asp.net页面)按钮的onclick事件之前运行javascript

asp.net - 为什么这个 JQuery 调用 asp.net pagemethod 会加载整个页面?

javascript - 在 asp.net webforms 中引用 javascript 文件

html - 使用 jQuery 显示 XML 文件中的数据

javascript - 添加按钮以切换浏览器

jquery - 将类添加到特定的 WordPress anchor 菜单

jQuery - 从上面查找具有特定类的第一个元素,但不在另一个元素之前