2015-06-02 25 views
0

jQuery的next()返回元素的下一個直接兄弟。
但是,即使該元素具有不同的譜系,如何找到下一個呈現的元素?
例如,考慮這個(簡單的)HTML:如何使用jQuery在呈現的佈局中找到「next」元素?

<div id='a'>A 
    <div id='b'>B 
     <div id='c'>C</div> 
    </div> 
    <div>D</div> 
</div> 

這使得喜歡的東西:

A 
B 
C 
D 

你的眼睛自然看到d以下的C,雖然在DOM他們的叔叔/侄子。

那麼,如何找到"D"#c

var c = $('#c'); // Pretty straightforward 
var x = c.someJqFunction(with some params); 

注:假裝你不知道什麼d,除了它的存在。它可能是#c的真正的下一個兄弟,或者它可能來自#c的複雜遍歷。顯而易見的是,他們被稱爲輸出中緊鄰的

+0

你可以遞歸地檢查你的當前元素是否是最後一個子元素,然後向上移動樹,直到你有一個'next'元素作爲目標。 –

+0

可以D也有ID嗎? – JSelser

+0

我們可以假設它是一個div嗎?然後我們可以使用.closest()和:contains選擇器。 – zfrisch

回答

1

http://jsfiddle.net/xa13oq7z/

function getNext(id) { 
    var elm = $('#' + id); 
    return elm.children(':first')[0] || elm.next()[0] || elm.parent().next()[0]; 
} 
+0

我喜歡這個 - 簡潔,適用於所有情況。謝謝! – dlchambers

0

這是你如何能做到這

$(function(){ 
console.log($('#c').parent().siblings().html()); 

}); 

注:這是假設只有一個兄弟爲divid "b"

看那Fiddle鏈接

0

會這樣嗎?

function getNext(elem){ 
    var next = elem.next(); 
    if(next.length){ 
     if(next.get(0).offsetParent != null){ 
      return next; 
     }else{ 
      return getNext(next); 
     } 
    }else{ 
     return getNext(elem.parent()); 
    } 
}