3

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

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

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

4

4 回答 4

3

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

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

这意味着您的“当前元素”实际上必须是 'has' 参数而不是基本表达式。它不应该改变任何东西,只是它的可读性比<.

作为参考,在某些情况下,jQuery API 可能不是选择器的有效替代品,例如:

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

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

于 2014-07-04T09:51:24.960 回答
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 或 title 或 class,取决于页面上已有的内容

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

于 2010-03-05T13:20:12.873 回答
0

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

可以改源代码吗?

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

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

使用示例(注意 parent 已经存在,所以我使用 getParent 代替):

jQuery('#myelement:getParent');
于 2010-03-05T14:50:30.107 回答
0

由于 CSS 不能像 XPath 那样遍历树,所以我正在做一些修改和检查<字符串中的字符,拆分并.parent()手动调用。它不是最佳的,但它正在工作。

于 2010-03-05T15:35:14.317 回答