2010-03-05 86 views
3

有没有一种方法可以只使用jQuery的/ sizzle的CSS选择器来获取选定元素的父级?jQuery/Sizzle选择器查找当前元素的父级?

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

我在文档中看不到任何东西,所以我想知道它是否是无证的,或者是否有黑客可以使用?

+0

为什么你无法使用.parent()? – 2010-03-05 10:17:18

+0

他可能需要现场功能的父母 – naugtur 2010-03-05 13:13:57

回答

0

由于CSS无法像XPath那样遍历树状结构,我正在进行一些修复操作,并检查字符串中的字符<,然后手动分割并调用.parent()。它不是最优的,但它的工作。

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选择器

+0

它真的需要通过CSS选择器来完成,因为选择器以字符串形式传入。它很烦人,CSS不能像XPath那样遍历树。 :( – 2010-03-05 14:42:01

1

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

您可以更改源代码?

如果是的话,就可以添加自定义伪选择:

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

使用的例子(注意,父母已经存在,所以我用的getParent代替):

jQuery('#myelement:getParent'); 
+0

作为@maël-nison的[回答](http://stackoverflow.com/a/24571489/1273938)显示,确实有可能直接选择父项。 – LeoRochael 2016-10-17 11:31:01

3

正确的解决方法(即实际上使用jQuery 选择而不是jQuery的API的一个。)这是一个:

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

这意味着,你的“当前元素”实际上已经成为“有'参数而不是基本表达式。它不应该改变任何东西,除了它比<可读性稍差。

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

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

在这种情况下,选择允许过滤现场活动。