2012-12-06 3 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()으로 요소 자체를 포함 할 수있는 방법이 있나요 또는이 일을 더 나은 방법이? 다른 순서로 당신이 그들을 원하는 경우,

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

또는 :

+1

당신이 할 수있는 'andSelf'를 사용하여 대상 요소를 포함하십시오. –

+0

나는 andSelf()를 시도하고 배열의 역을 반환합니다. –

+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).add($(event.target).parents()); 

는 당신이 필요로하는 것은 (즉이 아닌 jQuery를 객체 배열 인 경우), 역순으로 사용할 수 있습니다.

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

이 작업은 거의 완료된 것처럼 보입니다. 그러나 두 가지 방법 모두 내가 원했던 것과 반대가됩니다. –

+0

@BlakePlumb 편집보기 : 괜찮습니까? –

+0

Treborbob의 대답은 +1하지만 .get(). reverse() –

관련 문제