2012-02-01 2 views
12

Jquery를 사용하여 html/val이 0 인 "span"요소가 포함 된 "li"요소에 클래스를 추가하고 싶습니다.특정 html 값을 가진 자식 요소를 포함하는 Jquery get

<ul> 
    <li><span>Item 1</span><span class="num">30</span></li> 
    <li><span>Item 2</span><span class="num">0</span></li> 
    <li><span>Item 3</span><span class="num">20</span></li> 
</ul> 

내가 다음에 변경하려면 : : 예를 들어

내 코드는 다음과 같습니다 만약 내가 요소 속성 값을 확인하는 코드를 사용했던 과거

<ul> 
    <li><span>Item 1</span><span class="num">30</span></li> 
    <li class="disabled"><span>Item 2</span><span class="num">0</span></li> 
    <li><span>Item 3</span><span class="num">20</span></li> 
</ul> 

하지만, 이 효과를 내기 위해 HTML/val을 사용하지 마십시오.

$('li').has('span.num').addClass('disabled'); 

그러나이 경우 결과에서 : 분명히 일을하려고하지 않습니다

<ul> 
    <li class="disabled"><span>Item 1</span><span class="num">30</span></li> 
    <li class="disabled"><span>Item 2</span><span class="num">0</span></li> 
    <li class="disabled"><span>Item 3</span><span class="num">20</span></li> 
</ul> 

... 감사

+2

왜 비활성화 된 클래스 대신 선택한 클래스를 추가하겠습니까 ?? – palAlaa

+0

항목을 사용하지 않기 때문에 사용자가 아무것도 선택하지 않습니다. –

답변

15

이것은 당신이 원하는 일을해야한다.

$('li').each(function(){ 
    if($(this).find('span.num').text() == '0') $(this).addClass('disabled') 
}); 

JS Fiddle

나는 다음과 같은 제안 것 :

$('li').has('span.num:contains(0)').addClass('disabled') 

을하지만 값이 HTML 내부에 존재하는 경우 검사로는 작동하지 않습니다 - 아니 정확히 일치하는. 이 경우 span.num 요소 각각에 0이 있으므로 모든 li이 선택한 클래스를 가져옵니다. : contains() selector에 대한 equals() 대응 항목이없는 것 같습니다.

+0

이것은 훌륭합니다. 고맙습니다. –

+0

.has와 "contains"를 사용하여 추가 의견을 보내 주시면 감사하겠습니다. 그것은 내가 취하고 자하는 바램과 정확히 일치합니다. 어쩌면 불가능할 수도 있지만, 미래에 이런 것이 필요할지도 모른다는 것을 누가 압니다. –

2

시도 :

$('li span.num').filter(
    function(i){ 
     return $(this).text() == '0'; 
    }).closest('li').addClass('selected'); 

JS Fiddle demo.

+2

이것은 OP가 요구하는대로 출력을 생성하지 않습니다. – ShankarSangoli

+0

왜 $ (this)를 반환하고 true 또는 false가 아닌가? – gdoron

+0

@ShankarSangoli : 죄송합니다. 그래, 당신 말이 맞아. 웬일인지 나는 그가 '30'스팬을 원한다고 생각했다. 감사! 그리고 편집! =) –

5

시도해보십시오.

$('ul span.num').filter(function(){ 
    return $(this).text() == "0"; 
}).parent().addClass('disabled'); 

Demo

+0

나는 지금 당장 이걸 보지 못했지만 이것은 잘 작동한다. +1. –

+0

.filter vs를 사용하면 성능상의 이점이 있습니까?마다? –

+1

'filter'와'each'는 2 개의 서로 다른 연산에 사용됩니다. 'each'가 모든 매치 된 요소들의 집합을 반복하고 그것들에 대한 연산을 수행하는데 사용되는 어떤 조건을 기반으로 매치 된 요소들의 집합을 필터링하고자 할 때'filter'를 사용합니다. 귀하의 경우에는'filter'가 요소를 필터링하고 (text == 0) 필요한 클래스를 적용하기 (disbaled) 때문에 가장 적합합니다. – ShankarSangoli

0

당신은 다음 parent()와 부모 <div>를 얻을 filter()으로 <span> 요소를 일치시킬 수 있습니다 :

$("li > span.num").filter(function() { 
    return $(this).text() === "0"; 
}).parent().addClass("disabled"); 
+0

'span.num' 밖의 텍스트에'span'을 추가하는 것은 어떻습니까? – ShankarSangoli

+0

'아이템 1'과 같은 텍스트입니까? 질문자의 마크 업에 이미 ''요소가 있습니다. 내가 놓친 게 있니? –

+0

오 예, 당신 말이 맞습니다 : P – ShankarSangoli

0

는 여기에 빠른 방법을의하십시오 jsFiddle example

$('li .num').each(function(){ 
    if ($(this).text() == '0') $(this).parent().addClass('disabled'); 
}); 

.

관련 문제