2012-05-26 4 views
0

여기서 도움을 얻을 수 있기를 바랍니다.jQuery .parent() from li : nth-child (xy)

내가 (n 번째 아이) 메뉴의 정확한 활성 리 요소를 얻기 위해이 기능을 사용 :

function getElementPathWithJquery(element) { 
    return $(element).parents().andSelf().map(function() { 
     var $this = $(this); 
     var entry = '';   
     if(this.nodeName === "BODY" || this.nodeName === "HTML") { 
     // do nothing 
     } else { 
     entry += this.nodeName; 
     if (this.className) entry += "." + this.className.replace(/ /g, '.'); 
     if (this.id) entry += "#" + this.id; 
     if ($this.siblings(entry).length > 0) entry += ":nth-child(" + $this.prevAll(entry).length + ")"; 
     } 
     return entry; 
    }).get().join(" "); 
} 

를 지금 요구 수준에있는 부모 리튬 요소 (A addClass를 얻을 것이다 '활성') 속성이 있지만, 다음은 작동하지 않습니다 : 나는 정확한 n 번째 요소는 메뉴 시스템은 하나 개의 항목이 실제로 이상의 범주에 속할 수있는 분류 시스템이 있다는 사실이다 필요한 이유

if($('#MENU_MAIN').find("ul.menu-level-3>li").hasClass('active')) { 
var path = getElementPathWithJquery($('#MENU_MAIN').find("ul.menu-level-3>li.active")); 
$(path).parent().parent().css('border','3px solid red'); 
} 

이유. 같은 솔루션 :

$('#MENU_MAIN').find("ul.menu-level-3>li.active").parent().parent().css('border','3px solid red'); 

작품,하지만 범주의 수에 따라 발견 된 항목이 더 하나보다는 다만 부모 리튬은 빨간색 테두리를 가질 수에 속한다.

도움 주셔서 감사합니다. 감사 로버트

+0

경로를 올바르게 찾았지만 $ (경로)에 추가 된 .parent(). parent() 체인이 결과를 얻지 못할 것입니다 ... – rowild

+1

왜 CSS 선택기를에서 디코딩하려고합니까? CSS 선택기를 사용하여 방금 해결 한 요소입니까? –

+0

어제 그 어리 석음을 깨달았습니다 ... 음 ...하지만 여기에서 CSS 선택기로 되돌려 놓고 SELECTED_AGAIN.parent(). parent()와 같은 hiearchy에서 2 단계 위로 올라갈 수 있습니다. css (doSomthing)? – rowild

답변

0

당신은 모든 요소의 조상을 얻을 수 parents()을 사용할 수 있습니다; 선택기를 사용하여 결과를 제한 할 수 있습니다.

+0

나는 그 사실을 알고있다. 그러나이 상황은 다릅니다. 메뉴의 세 번째 레벨에는 두 번째 레벨 메뉴 항목에 속할 수있는 항목이 있습니다 (두 번째 수준은 세 번째 수준 요소가 구성원 인 범주 시스템으로 작동하기 때문). 메뉴 레벨 2-A - 메뉴 레벨 3-A - 메뉴 레벨 3-B 메뉴 레벨 2-B - 메뉴 레벨 3-A - 메뉴 레벨 3-B 내가 먼저 알아 내야 이유 목록 요소의 n 번째 - 자식 번호와 거기에서 나는 오직 하나의 레벨 2 메뉴 항목 만 활성화하도록 위쪽으로 가야합니다. 어떻게이 작업을 수행 할 수 있습니까? – rowild