2017-09-15 175 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