首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery :父选择器在jQuery UI对话框中不像预期的那样工作

jQuery :父选择器在jQuery UI对话框中不像预期的那样工作
EN

Stack Overflow用户
提问于 2012-07-27 16:29:11
回答 3查看 1.6K关注 0票数 1

我有一个没有标题的jQuery UI对话框。我已经成功了,这不是问题所在。

我好奇的是,为什么jQuery :parent选择器不会选择对话内容div的父函数,但是parent()函数会选择。

HTML:

代码语言:javascript
复制
<input id="example1" type="button" value="Use :parent selector">
<input id="example2" type="button" value="Use parent() function">

<!-- 
One of many dialogues on the page, but this one needs
the title removed.
-->

<div id="throbber" style="display:none">
    <p>Doing work...be patient....</p>
    <img src="http://i.stack.imgur.com/GUw9u.gif"/>
</div>

脚本:

代码语言:javascript
复制
$("#example1").bind("click", function() {
    $("#throbber").dialog("destroy"); // for jsfiddle example
    $("#throbber").dialog({
        resizable: false,
        modal: false,
        width: 150
    });

    $("#throbber:parent .ui-dialog-titlebar").hide();
});

$("#example2").bind("click", function() {
    $("#throbber").dialog("destroy"); // for jsfiddle example
    $("#throbber").dialog({
        resizable: false,
        modal: false,
        width: 150
     });

    $("#throbber").parent().find(".ui-dialog-titlebar").hide();
});

下面是jsFiddle中的上述代码:

http://jsfiddle.net/kevink/kPMQf/

在chrome中,如果我在呈现对话框后设置了一个断点,如果我按预期做了$("#throbber:parent"),它会选择自己:

如果我尝试选择它的:parent它没有,它只是再次选择自己:

如果我使用$("#throbber").parent(),这一次它会选择它的父级:

这里发生了什么,为什么:parent不选择#throbber的父级而.parent()选择了?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-27 16:36:26

来自父选择器的jQuery文档

说明:选择其他元素的父元素,包括文本节点。

因此,当您执行$("#throbber:parent")时,jQuery所做的是使用id #throbber查找元素,该元素恰好是另一个元素的父元素(在本例中是pimg标记)。

另一方面,.parent()选择当前选择器的父元素,因此执行$("#throbber").parent()将找到id #throbber元素的父元素。

票数 3
EN

Stack Overflow用户

发布于 2012-07-27 16:35:27

.parent()获取当前匹配元素集合中每个元素的父元素,可以选择由选择器筛选。

*父母选择其他元素的父元素(包括文本节点)的所有元素。

$("#throbber").parent().find(".ui-dialog-titlebar")#throbber 再到父母,再从到.ui-dialog-titlebar。可以访问#throbber的兄弟姐妹。

$("#throbber:parent .ui-dialog-titlebar")正在检查#throbber 是否是的父母,然后把送上.ui-dialog-titlebar。只能访问#throbber的子级。

票数 2
EN

Stack Overflow用户

发布于 2012-07-27 16:36:14

我不认为:父元素可以以这种方式使用-它只过滤您已经拥有的选择器,它只匹配对象,这些对象是其他元素的父元素(参见:http://api.jquery.com/parent-selector/)。所以它匹配#throbber元素,因为它正在寻找一个名为#throbber的元素,它是一个父元素!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11691906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档