有没有办法只使用jQuery的/ sizzle的CSS选择器来获取所选元素的父级?
我需要能够在使用jQuery时获取元素的父级,但我无法使用jQuery('#myelement').parent()
,因为我接收选择器作为字符串和“用户”需要能够回到树上。
我在文档中看不到任何内容,所以我想知道它是否没有文档记录,或者我是否可以使用hack?
答案 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()
。它不是最佳的,但它正在发挥作用。