2012-12-06 50 views
2

我想創建一個數組,其中包含用戶在內容可編輯div中點擊的所有元素。我有這個工作與下面的代碼。獲取一個元素的所有父母,包括元素本身

var els = []; 
var target = event.target; 
while (target){ //Create an array of parent elements 
    els.push(target); //Push target to the back of the array 
    target = target.parentNode; 
} 

但我在想,如果我能減少這種與jQuery的一條線。 jQuery的.parents()幾乎讓我有,但不包括第一event.target

var els = $(event.target).parents(); 

有沒有一種辦法,包括元素本身具有.parents()或者是有這樣做的更好的辦法?

+1

你可以使用'andSelf'來包含目標元素。 –

+0

我已經嘗試過並且()它返回數組的反向。 –

+0

你給父元素分配了一個'onclick'事件嗎? – Omid

回答

5

andSelf怎麼樣?

var els = $(event.target).parents().andSelf(); 

礦會讓你,祖父母,祖父母,父母,自我。

如果你想:自己,父母,祖父母,曾祖父母,嘗試用這種延伸的Jquery:

$.fn.reverse = [].reverse; 

,然後做:

var els = `$(event.target).parents().andSelf().reverse(); 

例子:jsFiddle

+0

很明顯,這對OP沒有效果(參見上面的註釋)。 –

+0

與dystroy .get()。reverse()結合使用後感謝您的幫助! –

3

您可以使用add

var els = $(event.target).parents().add(event.target); 

,或者,如果你希望它們以不同的順序:

var els = $(event.target).add($(event.target).parents()); 

如果你需要的是一個數組(即不是一個jQuery對象),則可以使用反轉:

var els = $(event.target).parents().add(event.target).get().reverse(); 
+0

這似乎幾乎這樣做,但你的方法都想出了我想要的東西相反。 –

+0

@BlakePlumb請參閱編輯:對你有幫助嗎? –

+0

我選擇了Treborbob的答案,但是爲.get()+1。reverse() –

相關問題