2012-12-12 226 views
0

我正在嘗試編寫一些動態代碼,並且我無法確定我之後的元素是兄弟姐妹還是兄弟姐妹的孩子。 我只有一個類,並且必須在元素後面搜索具有此類的第一個元素。 例如:獲取某個元素之後的所有元素,包括其子元素

<something class='EitherMe'/> 

    <table> 
    <thead class = 'EitherMe'></thead> 
    <tbody> 
     <tr class = 'selectAfterThis'><td></td></tr> 
     . 
     . 
     . 
    </tbody> 
    <tfoot class ='EitherMe'> 
     <tr></tr> 
     <tr class='OrMe'></tr> 
    </tfoot> 
    </table> 

    <something class='OrMe'/> 

我會得到「EitherMe」或者根據用戶的需要「奧瑪」。我需要精確選擇那個在'selectAfterThis'之後出現的元素。

nextAll()不起作用。因爲它只能得到兄弟姐妹。 有沒有辦法做到這一點?

更新:我把thead放在上面的例子中,因爲大多數建議都是通過父項。我不知道是否沒有高一級的元素。 我可以通過限制班級的確切位置來限制我的插件,但如果可能,我想避免這種情況。我只需要帶有指定類的元素,它位於'selectAfterThis'下面,不管它是在他的下面,還是遠遠在他的下面,或者它與'selectAfterThis'的父子關係並不重要

更新3:這是我寫的一個迷你插件,來自於wirey的回答。希望它能幫助像我這樣的問題的其他人:http://jsfiddle.net/jTLt2/4/。所有的積分都會變得有些費解。我只做了一些修改,使其不僅僅是父母兄弟姐妹和父母兄弟姐妹的孩子。

請讓我知道,如果你測試它。我想知道,如果它的工作原理100%

下面的代碼:

(function($){ 
    $.fn.nextInView = function(selector) 
    { 
     var ret = this.nextAll(selector);  
     for(var i = 0;this.parents().eq(i).find('body').length < 1 ;i++){ 
      ret = ret.add(this.parents().eq(i).nextAll(selector)); 
      ret = ret.add(this.parents().eq(i).nextAll().find(selector)); 
     }    
     return ret.first(); 
    } 
})(jQuery) 
+2

哪裏是起點?什麼是上下文? –

+0

讓我做一個更新,如果可能的話,我想避免通過父母。因爲在上面的例子中,例如中可能存在另一個具有該類的元素。儘管機會很渺茫。 – Nogitsune

+0

好吧..但你想要找到的第一個元素是在之後而不是在之前?並且你父母的兄弟元素中還有那些類? –

回答

1

需要分別將它們添加到一個集合..然後得到的第一個從集合中找到最接近的一個

// get siblings first - they will always be before parents 
var ele = $('.selectAfterThis').nextAll('.OrMe'); 
// get parent siblings after current parent - they will be before their children 
ele = ele.add($('.selectAfterThis').parent().nextAll('.OrMe')); 
// get descendants that match of parent slibings 
ele = ele.add($('.OrMe',$('.selectAfterThis').parent().nextAll())); 
// now get first in collection 
ele.first();​ 

http://jsfiddle.net/fRq4z/

+0

謝謝。我認爲這是我需要的。 – Nogitsune

+0

@ user1733078您的歡迎。希望有一個更簡單的方法:P ..如果我想到一個我會更新我的答案爲你 –

+0

關於最後一行。 「得到父母兄弟姐妹匹配的後代」我不太明白......你能解釋一下嗎? – Nogitsune

相關問題