2014-03-24 2 views
0

.myClass과 일치하는 모든 요소에 대해 함수를 한 번 실행해야합니다. 그러나 각 요소의 부모 수의 순서로 실행해야합니다. 내가 뭘 생각할 수each() 함수를 부모 수순으로 실행하십시오.

$('.myClass').each(function(index){ 
    //my code 
}); 

있는 유일한 방법은 바로 parents().length()을 기반으로 데이터 정렬 속성을 추가 만 확실히 더 좋은 방법은 그 다음 거기에 하나 전에 다른 each() 기능을하고있다?

+0

현재'each()'호출에서'parents(). length '를 사용하지 못하게합니까? –

+0

아니요,하지만 함수를 호출하기 전에 요소를 정렬해야합니다. 또는 다른 방법으로 부모 수의 순서로 함수를 실행하십시오. – sanjaypoyzer

+0

@ FrédéricHamidi 그러나 부모 수 순서대로 각 콜백을 실행하는 데 어떻게 도움이 될 수 있습니까? –

답변

4

map 개체의 배열에 대한 요소와 함께 부모 수입니다. 그런 다음 정렬하고 결과를 반복합니다.

var els = $('.myClass'); 

var data = els.map(function(index, el){ 
    return {el: el, pars:$(el).parents().length}; 
}).toArray() 
    .sort(function(a,b) { 
    return a.pars - b.pars; 
}); 

$.each(data, function(i, obj) { 
    var el = obj.el; 
    // do something with el 
}); 
+0

감사합니다. 그 시점에서'el'로 jquery 일을하는 올바른 구문은 무엇입니까? '$ (el)'과'el'는 작동하지 않습니다. – sanjaypoyzer

+0

@sanjaypoyzer :'el'은 DOM 요소이므로 jQuery 메서드를 사용하려면 jQuery 함수'$ (el)'에 전달해야합니다. 그게 효과가 없다면, 나는 왜 그런지 모른다. 위의 코드를 올바르게 복사하거나 붙여 넣었습니까? –

+0

아, 바보 같았습니다 - 잘 작동합니다. 건배. – sanjaypoyzer

관련 문제