2013-09-26 2 views
4

li 요소에있는 div 수를 얻는 방법은 무엇입니까?자식 div 요소가 두 개 이상있는 경우 jquery

여기 내 코드는 있지만 작동하지 않습니다. (리튬 내부 단지 1 사업부가도 때, 모든 IMG 클래스를 가져옵니다 의미 작동하지 않습니다.) 여기

if($('.lookbook ul li').find('div').length > 1){ 
    $('.lookbook ul li img').addClass('lbcursor'); 
} 

내 HTML 구조입니다 :

<div class="lookbook> 
    <ul> 
     <li> 
      <div><img/></div> 
      <div></div> 
     </li> 
     <li> 
      <div><img/></div> 
      <div></div> 
     </li> 
     <li> 
      <div></img></div> 
     </li> 
    </ul> 
</div> 

세 번째 IMG는 안 수업 가져와.

li 요소의 div 수를 원하고 div가 1 개 이상인 경우 .lbcursor 클래스를 img에 추가해야합니다.

내가 여기에 비슷한 답을 발견했다 : jquery: if children with specific class?을하지만 난 그냥 경우 절은 정확하다는 것을 인정

아를 작동하지 않습니다. 문제는 클래스를 추가하는 요소입니다. 각 요소는 특정 할 수 있도록 아마도 이러한 맥락 각을 사용하여

+0

"작동하지 않음"을 정의 할 수 있습니까? div를 찾지 못합니까?또는 클래스를 추가하지 않습니까? 직계 후손을 찾고 있습니까? – PSL

+0

내 질문을 편집했습니다. 예 직계 가족을 찾고 있습니다. –

+1

jsFiddle에 샘플 코드를 입력하십시오. HTML 구조가 표시됩니다. –

답변

9

해야 당신 루프를 통해 그 요소를 대상으로해야합니다.

$('.lookbook ul li').each(function() { 
    var $this = $(this); 
    if ($this.find('div').length > 1) { //if looking for direct descendants then do .children('div').length 
     $this.find('img').addClass('lbcursor'); 
    } 
}); 

Fiddle

당신은 또한이 쓸 수 있습니다 :

$('.lookbook ul li').each(function() { 
    var $this = $(this); 
     $this.find('img').addClass(function(){ //using function argument syntax for addClass 
      return $this.find('div').length > 1 ? "lbcursor" : ""; 
     }); 
}); 
2

:

$('.lookbook ul li').each(function() { 
    if ($(this).find('div').length > 1) { 
    $('.lookbook ul li img').addClass('lbcursor'); 
    } 
}); 

언급 로 [편집]을

$('.lookbook ul li img').addClass('lbcursor'); 

$(this).find('img').addClass('lbcursor'); 
+1

은 '.lookbook ul li'클래스가있는 모든 요소에서 둘 이상의 div를 찾으면 ".lookbook ul li img"와 일치하는 모든 요소에 lbcursor 클래스를 추가합니다. – zoranc

+0

정답은 이미 주어졌다. 어쨌든 고마워. –

+0

@TimotheusTriebl 조란이 말했듯이, 그 두 대답은 같지 않습니다. 이 대답은 단순히 작동하지 않습니다. – Itay

1

코드의 상태는 괜찮습니다,하지만 경우 블록 내에서 당신은 CSS를 추가하는 모든 이미지에 액세스 수업.

나는 당신의 코드는 다음과 같이해야한다고 생각 :

if($('.lookbook ul li').find('div').length > 1){ 
    $('.lookbook ul li img').find('div').addClass('lbcursor'); 
} 

(리팩토링을 수행 할).

if 블록 내에서 find()에 대한 추가 호출을 염두에 두십시오.

11

:has():nth-of-type() 선택자를 사용하여 간단하고 간단합니다.

$('.lookbook ul li:has(div:nth-of-type(2)) img').addClass('lbcursor'); 

jsFiddle Demo

  • P.S - :nth-of-type() 선택과 마찬가지로,이 (귀하의 질문에 보이는대로) div 요소는 동일한 요소의 직계 자식 경우에만 작동합니다.
+0

이전 브라우저에서 작동하는지 의심 스럽습니다. – PSL

+0

@PSL - IE7에서 테스트했는데 제대로 작동합니다. jQuery (1.x.x)는 요소를 선택하는 동안 오래된 브라우저를 처리하는 방법을 알고있다. – Itay

+1

아아 쿨하고 어차피 내 +1을 가지고 ... – PSL

관련 문제