2010-03-01 5 views
3

jQuery를 1.4 :jQuery를 :하지() 문제

$('#menu li:last:not(.ignore)').addClass('last'); 

HTML은 :

<div id="menu"> 
    <ul> 
     <li>item 1</li> 
     <li>item 2</li> 
     <li class="ignore">item3</li> 
    </ul> 
</div> 

.. lastitem 2 클래스에 적용되지 않는다. 여기서 내가 뭘 잘못하고 있니?

감사

답변

5

변경 :last:not()의 순서 :

$('#menu li:not(.ignore):last') 
+0

아! 그 이유는 다음과 같았 기 때문에 나는 그 생각을 일축했다. 마지막 : jquery가 아니라 일찍 작동하지 않았다. 1.4. 어쨌든 고마워! :) – 3zzy

+0

@Nimbuz : 선택자': not (...) : last'와': last : not (...)'는 다른 의미를가집니다. 전자는 먼저': not (...) '표현식과 일치하지 않는 모든 요소를 ​​제외하고 마지막 요소를 가져옵니다. 후자는 먼저 마지막 요소를 가져온 다음': not (...) '조건과 일치하지 않으면 제외시킵니다. – Gumbo

2

표현식이 작동하는 방법은 이것이다 :

  • ID "메뉴"를 가진 요소를 찾기;
  • 해당 요소의 모든 하위 항목 목록 항목을 찾으십시오.
  • 결과를 해당 세트의 마지막 요소로 제한하십시오.
  • "무시"클래스가없는 요소를 필터링하여 필터링합니다 (이 요소는 마지막 요소 일뿐입니다).

마지막 요소에는 무시 클래스가 있으므로 필터링됩니다. 그것이 작동하지 않는 이유입니다. 순서를 반대로 : 그것은 나에게 더 논리적 인 것 같다

$("#menu li:not(.ignore):last").addClass("last"); 
0

적어도 '.IGNORE의를 선두 전에 나에게 목록의 항목을 가져 오기'말 :

// tested 
$("#menu li.ignore:first").prev("li").addClass('last');