我已經重寫了這個問題並刪除了這個例子,因爲它似乎混淆了你。對不起,麻煩了。匹配第一匹配的分層後裔與jQuery選擇器
我需要匹配選擇匹配其第一後裔。
如果多個元素此選擇匹配,但在分離樹(即,如果一個不是另一個的父母),那麼我要選擇他們兩個。
確切的DOM結構是未知的,所以我不能使用像.children()
或>
選擇器這樣的函數(因爲他們希望用戶確定實際的DOM結構)。
我真正需要的是什麼樣子的.closest()
功能,但在一次匹配,而不是孩子父母,並有可能多個孩子。
我已經重寫了這個問題並刪除了這個例子,因爲它似乎混淆了你。對不起,麻煩了。匹配第一匹配的分層後裔與jQuery選擇器
我需要匹配選擇匹配其第一後裔。
如果多個元素此選擇匹配,但在分離樹(即,如果一個不是另一個的父母),那麼我要選擇他們兩個。
確切的DOM結構是未知的,所以我不能使用像.children()
或>
選擇器這樣的函數(因爲他們希望用戶確定實際的DOM結構)。
我真正需要的是什麼樣子的.closest()
功能,但在一次匹配,而不是孩子父母,並有可能多個孩子。
每棵樹從#B
由.children()
定義開始;這樣的樹中的每一個第一.foo
是.find('.foo:eq(0)')
,所以你應該能夠使用:
$('#B').children(':not(.foo)').andSelf().find('.foo:eq(0)');
在我自己的代碼中有一個'.foo',但我想知道是否有一種方法來匹配每個'.foo'第一個孩子,就像[this]一樣(http://jsfiddle.net/7gfFP/2 /)示例(應該突出顯示CCC和GGG)。 –
新的解決方案('$(「#B」)兒童()找到(「富:EQ(0)」);')在工作(另一個沒有,因爲孩子選擇防止多個疊瓦級) 。但是,我不確定要理解爲什麼'.find('。foo:eq(0)')'不會返回與.find('。foo')。eq(0)'相同的內容。 –
好吧,我明白了,實際上它不起作用(但幾乎就是這樣!)。它不能匹配第一個孩子的'.foo's(在[本例中](http://jsfiddle.net/7gfFP/4/),BBB也應該突出顯示)。 –
你可以使用jQuery插件closestDescendant
這implemenst廣度優先搜索,所以其檢查的所有兒童當前的元素會降低到下一個級別。
jQuery('#parent').closestDescendant(".selector", true)
在這裏,你可以找到該功能的演示:demo closestDescendant
如果你能保證唯一的ID
加載插件或將其添加到您的源代碼,你可以簡單的把它用這種方式後, ,肯定'$('#B')。find('#C')'會起作用嗎? – BoltClock
@BoltClock。但hr寫道他不能,我認爲你是jQuery和css master,爲什麼你需要'find'作爲'id'選擇器?! – gdoron
@gdoron:我只是把它放在他的'.find('...')'例子中。他也沒有說'#B'和'#C' *不存在於真實的代碼中,所以我假設它們確實存在,並且向他扔東西。理想情況是,你可以只使用'$('#C')'......但我想我並不真正理解OP的實際代碼中發生了什麼。 – BoltClock