需要等效于函数$.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);
位于。
答案 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
。