是否有一种方法可以仅使用jQuery/Sizzle的CSS选择器获取所选元素的父元素?
我需要在使用jQuery时能够获取元素的父元素,但是我无法使用jQuery('#myelement').parent()
,因为我接收到的选择器是一个字符串,而“用户”需要能够向上移动树。
我在文档中找不到任何内容,所以我想知道它是否未记录或者是否有一个我可以使用的黑客方法?
是否有一种方法可以仅使用jQuery/Sizzle的CSS选择器获取所选元素的父元素?
我需要在使用jQuery时能够获取元素的父元素,但是我无法使用jQuery('#myelement').parent()
,因为我接收到的选择器是一个字符串,而“用户”需要能够向上移动树。
我在文档中找不到任何内容,所以我想知道它是否未记录或者是否有一个我可以使用的黑客方法?
正确的解决方案(即实际使用jQuery选择器而不是jQuery API的方案)是这个:
$(':has(> #myElement)');
这意味着你的“当前元素”实际上必须是“has”参数,而不是基本表达式。这不应该改变任何东西,只是相对于<
来说可读性稍差一些。
参考jQuery API可能无法在某些情况下有效替代选择器,例如:
$(document).on('click', ':has(> .widget)', function () {
// ...
});
jQuery(jQuery('#myelement').parent())
是不带附加功能的获取对象。
好了,笑话到此为止;)
我猜您需要为 live 函数选择父级,这就是为什么您不能用这种方式获取它的原因。
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、title或class,取决于页面上已有什么。
如果你真的需要通过css选择器找到它——据我所知,这在设计上是不可能的。
这样的选择器在CSS和jQuery/Sizzle中都不存在。
您可以更改源代码吗?
如果可以,可以添加自定义伪选择器:
jQuery.expr[":"].getParent = function (node, index, prop, nodes) {
return jQuery(node).parent();
};
jQuery('#myelement:getParent');
h1:getParent
返回相同的元素:https://i.stack.imgur.com/fMZYQ.png - fregante由于CSS无法像XPath那样回溯树状结构,所以我进行了一些操作,并在字符串中检查字符<
,然后根据该字符进行分割并手动调用.parent()
方法。虽然不是最优解,但目前能够正常工作。