2011-11-18 34 views
1

我有這樣的事情:如何將當前元素與某個類的父類一起選擇?

body-viewport 
    div-page.active 
    div-panel 
    div-page 
    div-page 
    div-page 
    div-page.active //start here 

問:
是否有查詢一個簡單的方法來選擇所有活動的頁面,如果我從底層元素開始?

這會工作,但...

$('.div-page-active').closest('.body-viewport').find('.div-page-active').doSomething 

感謝您的幫助!

+1

jQuery的文檔包含一些重要關於最近和父母之間差異的信息。以防萬一,人們想知道爲什麼你選擇最接近父母http://api.jquery.com/closest/ – mrtsherman

+1

你提出的方法有什麼問題?你想避免什麼?如果你必須一遍又一遍地輸入,把它包裝在一個jQuery插件中。 –

回答

3
$('.div-page-active').closest('.body-viewport').andSelf() 

And Self:

在棧上添加上一組元件的電流設定。

+0

我不認爲這些代碼會完全符合OP的要求,但'and Self'很可能是解決方案的一部分。 –

+0

你說得對。我太興奮了,沒有仔細閱讀這個問題。這回答標題,但不是實際的問題。 –

+0

我喜歡這個!感謝您指點我和自己,現在可以踢出我的腳本的一大堆垃圾。 – frequent

0

嘗試

$(this).siblings(".div-page-active").doSomething(); 
+0

請注意他在示例代碼中的第二行。可以有一個有這個類的父母。 – mrtsherman

1

所以從底部元素,我會認爲你在事件處理程序已經收到了,所以我會打電話給this(原始元素)開始:

如果希望所有其他.div-page.active元素根據最近的.body-viewport任何地方,我覺得你的表情是相當多的最好辦法:

$(this).closest(".body-viewport").find(".div-page.active"); 

如果你只需要.div-page.active元素是祖先this(不是兄弟姐妹或堂兄弟等),那麼你將不得不編寫一個循環,jQuery沒有「找到我所有的祖先匹配選擇器X並停止選擇器Y的匹配」。例如,像(live example):

$("#target").click(function() { 
    var done = false; 
    $(this).parents().filter(function() { 
    var $this; 

    if (done) { 
     return false; 
    } 

    $this = $(this); 
    if ($this.hasClass("body-viewport")) { 
     done = true; 
     return true; 
    } 
    else { 
     return $this.hasClass("div-page") && $this.hasClass("active"); 
    } 
    }).add(this).css("color", "green"); 
    display("Matches turned green."); 
    return false; 
}); 

在這個例子中,當您單擊最下面.div-page.active,原來的那一個,在.div-page.active幾個級別了,和.body-viewport綠色。像這樣(在下面粗體顯示的比賽,不能對SO顏色),注意,我添加了一個不相關的.div-page.active和一個表弟,以顯示他們是如何不包括:

body-viewport 
div-page active -- ancestor, should be included 
    div-panel 
    div-page 
    div-page 
    div-page 
    div-page active -- click me 
    div-page active -- cousin, should NOT be included 
body-viewport 
div-page active -- unrelated, should NOT be included
+0

這很好,但爲了達到我的目的,代碼繁重。一個,因爲我也喜歡這樣做。謝謝! – frequent

相關問題