jQuery:nearest()CSS选择器

时间:2017-09-15 17:09:59

标签: javascript jquery css jquery-ui jquery-ui-draggable

需要等效于函数$.fn.closest()的选择器,例如

$('.wrapper:eq(0)>h1>strong:closest(.wrapper)')

实现应返回.wrapper元素,该元素是页面上的第一个元素,包含h1,因此包含strong元素。

实际上,上面的例子只是一个例子。在现实世界中,我需要$.fn.draggable来设置动态containment属性。

更新

更清楚地说明事情:页面上有(例如)树包装器div.wrapper。每个包装器都连接到兄弟包装器作为可排序区域。可排序项目为div.sub-wrapper,并且放置在其中一个包装器上,因此,它们可以移动到其他包装器。每个可排序项都有一个子元素div,它是可拖动的元素。我真正需要的是将后者的draggable.options.containment设置为当前位于当前位置的后一个(可拖动)元素的父包装器。主要问题是,如果我将注册包含像

{containment: $('div.draggable').closest('div.wrapper')}

然后,如果我将div.sub-wrapper移动到另一个div.wrapper,它将无法正常工作 - 包含元素保持不变 - 旧版div.wrapper以前可拖动的popupWindow.setOutsideTouchable(false); popupWindow.setFocusable(true); 位于。

2 个答案:

答案 0 :(得分:1)

我在想你想使用:has()

$('.wrapper:has(>h1>strong)')

答案 1 :(得分:0)

根据您的更新,我怀疑您需要单独初始化可拖动项而不是一组:

$("selector-for-your-draggables").each(function() {
    var $this = $(this);
    $this.draggable({
        // ...other options here...
        containment: $this.closest(".wrapper") // or .sub-wrapper, I couldn't
                                               // tell from the description
    });
});

你已经谈到了“目前”的父母。我无法弄明白你的意思,但是如果你想让可拖动的元素发生变化,那么当发生这种情况时,你需要"options"来更新containment