找到当前元素的父级的jQuery / Sizzle选择器?

时间:2010-03-05 10:01:42

标签: jquery jquery-selectors sizzle

有没有办法只使用jQuery的/ sizzle的CSS选择器来获取所选元素的父级?

我需要能够在使用jQuery时获取元素的父级,但我无法使用jQuery('#myelement').parent(),因为我接收选择器作为字符串和“用户”需要能够回到树上。

我在文档中看不到任何内容,所以我想知道它是否没有文档记录,或者我是否可以使用hack?

4 个答案:

答案 0 :(得分:3)

正确的解决方案(即实际使用jQuery 选择器而不是jQuery API的解决方案)是这样的:

$(':has(> #myElement)');

这意味着你的当前元素&#34;实际上必须是&#39; has&#39;参数而不是基表达式。它不应该改变任何东西,除了它比<的可读性稍差。

供参考,在少数情况下,jQuery API可能不是选择器的有效替代品,例如:

$(document).on('click', ':has(> .widget)', function () {
    // ...
});

在这种情况下,选择器允许过滤直播事件。

答案 1 :(得分:1)

这样的选择器不存在,也不存在于jQuery / Sizzle中的CSS中。

您可以更改源代码吗?

如果是,则可以添加自定义伪选择器:

jQuery.expr[":"].getParent = function (node, index, prop, nodes) {
    return jQuery(node).parent(); 
};

使用示例(请注意,父级已经存在,所以我使用了getParent):

jQuery('#myelement:getParent');

答案 2 :(得分:0)

jQuery(jQuery('#myelement').parent())正在获取没有附加功能的对象。

好的,笑话结束;)

我猜你需要为实时功能选择父级,这就是为什么你不能这样做。

jQuery('#'+jQuery('#myelement').parent().attr('id')).live(something);

这是你做到这一点的方式。 如果父元素没有id你可以使用更复杂的技巧

    //newline for reading comfort. skip it. --v
jQuery('[title='+jQuery('#myelement').parent() 
.attr('title',Math.round(Math.random()*100000)+']').attr('title')).live(something);

您可以使用ID或标题或类,具体取决于页面上已有的内容

如果你真的需要通过css选择器找到它 - 据我所知,这是不可能的css选择器的设计

答案 3 :(得分:0)

由于CSS不能像XPath一样遍历树,我正在进行一些调整并检查字符串中的字符<,然后拆分并手动调用.parent() 。它不是最佳的,但它正在发挥作用。