2017-09-15 137 views
-4

需要一个等效于功能$.fn.closest()的选择器,例如jQuery:最接近()CSS选择器

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

实现应返回.wrapper元素,这是第一个页面上,并包含h1,其中包含结果元素strong

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


UPDATE

为了使事情更清楚:(对前)有树包装div.wrapper页面上,接着一个被其他。每个包装都连接到同级包装作为可分类区域。可排序的项目是div.sub-wrapper,并放置在其中一个包装上,因此,它们可以移动到其他包装。每个可排序项目都有一个子元素div,它是可拖动的元素。我真正需要的是将后者的draggable.options.containment设置为当前位于当前位置的后一个(可拖动)元素的父级包装。主要的问题是,如果我将这样注册

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

遏制那么它将无法正常工作,如果我将移动div.sub-wrapper其他div.wrapper - 容器元件保持不变 - 一个老div.wrapper可拖动以前位于。

+3

CSS选择器没有选择祖先的特权。 –

+0

恐怕这很不清楚。你真的需要一个** CSS选择器,或者只是一个可以找到元素的jQuery调用(这意味着你可以使用jQuery-isms和/或随后的调用来缩小结果集)?你是否需要你在段落中所说的“实施应该......”或你在最后一段需要什么,这似乎不是同一件事?另外:你已经做了什么来解决这个问题?你的研究成果是什么?在[jQuery API](http://api.jquery.com/)中找到/没有找到/没有帮助的内容? –

+1

[mcve]会**真的帮助。描述代码/标记总是比显示实际显示问题的代码/标记的MCVE更不明显。 –

回答

1

我想你想使用:has()

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

不幸的是,这不是我正在寻找的。 Thx链接到文档,我知道该功能如何工作。 – impulsgraw

+0

不知道你的意思是它没有做你想要的....也许HTML与需要匹配的东西将有所帮助。所以,如果你有两个包装比你需要把内在的一个包装....或者住在两个电话需要完成的事实,并不是每件事都需要一条线。 – epascarello

+0

我已经更新了问题以使事情更清楚。该解决方案不会帮助我,因为'.wrapper'元素是动态更改的。那么,我有什么 - 是一个可拖动的DOM元素。我有它的变量指针。我需要告诉'jQuery.fn.draggable'库将'containment'属性(它是一个HTMLElement类型的)设置为当前最接近的'.wrapper'。我假设的最简单的解决方案是使用选择器':closest(.wrapper)',但由于':closest()'选择器不可能实现,所以我需要实现它。 – impulsgraw

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