有没有办法只使用 jQuery/sizzle 的 CSS 选择器来获取所选元素的父级?
我需要能够在使用 jQuery 时获取元素的父元素,但我无法使用jQuery('#myelement').parent()
,因为我将选择器作为字符串接收,并且“用户”需要能够向上移动到树上。
我在文档中看不到任何内容,所以我想知道它是否没有记录,或者是否有我可以使用的 hack?
有没有办法只使用 jQuery/sizzle 的 CSS 选择器来获取所选元素的父级?
我需要能够在使用 jQuery 时获取元素的父元素,但我无法使用jQuery('#myelement').parent()
,因为我将选择器作为字符串接收,并且“用户”需要能够向上移动到树上。
我在文档中看不到任何内容,所以我想知道它是否没有记录,或者是否有我可以使用的 hack?
正确的解决方案(即实际使用 jQuery选择器而不是 jQuery API 的解决方案)是这个:
$(':has(> #myElement)');
这意味着您的“当前元素”实际上必须是 'has' 参数而不是基本表达式。它不应该改变任何东西,只是它的可读性比<
.
作为参考,在某些情况下,jQuery API 可能不是选择器的有效替代品,例如:
$(document).on('click', ':has(> .widget)', function () {
// ...
});
在这种情况下,选择器允许过滤实时事件。
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 或 title 或 class,取决于页面上已有的内容
如果您真的需要仅通过 css 选择器找到它 - 据我所知,这对于 css 选择器的设计来说是不可能的
这样的选择器不存在,在 CSS 中也不存在 jQuery/Sizzle。
可以改源代码吗?
如果是,可以添加自定义伪选择器:
jQuery.expr[":"].getParent = function (node, index, prop, nodes) {
return jQuery(node).parent();
};
使用示例(注意 parent 已经存在,所以我使用 getParent 代替):
jQuery('#myelement:getParent');
由于 CSS 不能像 XPath 那样遍历树,所以我正在做一些修改和检查<
字符串中的字符,拆分并.parent()
手动调用。它不是最佳的,但它正在工作。