Javascript jQuery:closest()CSS选择器
需要一个与函数Javascript jQuery:closest()CSS选择器,javascript,jquery,css,jquery-ui,jquery-ui-draggable,Javascript,Jquery,Css,Jquery Ui,Jquery Ui Draggable,需要一个与函数$.fn.closest()等效的选择器,例如 $('.wrapper:eq(0)>h1>strong:closest(.wrapper)') 实现应该返回.wrapper元素,它是页面上的第一个元素,包含h1,因此包含strong元素 实际上,上面的一个例子只是一个例子。在现实世界中,我需要$.fn.draggable来设置动态包含属性 使现代化 为了让事情更清楚:页面上有(例如)树包装div.wrapper,一个接一个。每个包装器作为可排序区域连接到同级包装器。
$.fn.closest()
等效的选择器,例如
$('.wrapper:eq(0)>h1>strong:closest(.wrapper)')
实现应该返回.wrapper
元素,它是页面上的第一个元素,包含h1
,因此包含strong
元素
实际上,上面的一个例子只是一个例子。在现实世界中,我需要$.fn.draggable
来设置动态包含属性
使现代化
为了让事情更清楚:页面上有(例如)树包装div.wrapper
,一个接一个。每个包装器作为可排序区域连接到同级包装器。可排序的项目是div.sub-wrapper
,并且放置在其中一个包装上,因此可以将它们移动到其他包装上。每个可排序项都有一个子元素div
,它是可拖动的元素。我实际上需要的是将后者的draggable.options.containment
设置为后者(draggable)元素当前所在的父包装。主要的问题是,如果我将像
{containment: $('div.draggable').closest('div.wrapper')}
然后,如果我将div.sub-wrapper
移动到另一个div.wrapper
,它将无法正常工作-包含元素保持不变-一个旧的div.wrapper
拖动表以前位于。我想您要使用它
根据您的更新,我怀疑您需要单独初始化DragTables,而不是作为一组:
$("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
});
});
您已经讨论过它在“此刻”中的父元素。我不明白您的意思,但是如果您希望包含的可拖动元素发生更改,则需要一个“选项”
当发生这种情况时,调用updatecontainment
。CSS选择器没有选择祖先的权限。恐怕这还不清楚。您真的需要一个CSS选择器,还是只需要一个可以找到元素的jQuery调用(这意味着您可以在其中使用jQuery ISM和/或后续调用来缩小结果集)?你需要你在以“实施应该…”开头的一段中所说的,还是你在最后一段中所需要的,这似乎不是一回事?分别:你做了什么来解决这个问题?你的研究结果是什么?你从中发现了什么有用/没用?A真的很有用。描述代码/标记总是比显示实际显示问题的代码/标记的MCVE要清晰得多。不幸的是,这不是我要搜索的。Thx为链接到文件,我知道该功能是如何工作的。不知道你的意思,它不做你想要的。。。。也许html与需要匹配的内容会有所帮助。因此,如果你有两个包装,你需要把里面的一个有。。。。或者接受这样一个事实:它需要在两次通话中完成,而不是每件事都需要一行。我更新了这个问题,让事情变得更清楚。该解决方案对我没有帮助,因为.wrapper
元素是动态更改的。那么,我拥有的是一个可拖动的DOM元素。它的指针在一个变量中。我需要告诉jQuery.fn.draggable
库将containment
属性(这是一个HtmleElement类型)设置为其自身当前最接近的.wrapper
。我所设想的最简单的解决方案是使用选择器:closest(.wrapper)
,但这是不可能的,因为:closest()
选择器不存在,所以我需要以某种方式实现它。
$("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
});
});