jQuery를 사용하여 즉각적인 하위 div 요소 수


180

다음 HTML 노드 구조가 있습니다.

<div id="foo">
  <div id="bar"></div>
  <div id="baz">
    <div id="biz"></div>
  </div>
  <span></span>
</div>

foo유형에 해당하는 직계 자녀 수는 어떻게 계산 div합니까? 위의 예에서 결과는 2 ( barbaz) 여야합니다 .


1
다른 접근법 사이의 속도 차이를 확인하기 위해 jsperf 테스트를 추가했습니다. 아래 내 답변을 참조하십시오
manikanta

답변:


345
$("#foo > div").length

ID가 'foo'인 요소의 하위 요소는 div입니다. 그런 다음 랩핑 된 세트의 크기를 검색합니다.


1
금요일에 jQuery로 테이블 열을 계산하는 방법이 궁금했습니다. 비슷한 접근법을 시도해야합니다 $('#table > th').size().
Jim Schubert

1
때때로이 작동하지 않습니다 그리고 당신은 $ ( '# foo는')를 사용할 필요가 아이들 () @mrCoder에 따라 어쨌든 빠른 크기 ()..
472084

#foo 대신 이것을 사용하려면 이것을 사용하는 방법?
Mukesh

@ 472084 그렇게하면 "span"요소도 계산됩니다. 질문에 그가 모든 요소가 아닌 "div"요소 만 세기를 원한다는 점을 주목하십시오.
Angel Blanco

68

나는 사용하는 것이 좋습니다 $('#foo').children().size()더 나은 성능 위해 하는 .

속도 차이와 속도를 확인하기 위해 jsperf 테스트를 만들었습니다 .children() 메소드가 하위 선택기 (#foo> div) 접근 방식을 60 % 이상 (카나리아 빌드 v15) 20-30 % 에서 Firefox (v4)에서 .

그건 그렇고,이 두 가지 접근 방식은 동일한 결과 (이 경우 1000)를 생성합니다.

[업데이트] size () 대 길이 테스트를 포함하도록 테스트를 업데이트했는데 큰 차이가 없습니다 (결과 : length 사용량이보다 약간 빠릅니다 (2 %) size()).

[업데이트] OP에서 볼 수있는 잘못된 마크 업 ( 'markup validated'업데이트 전)으로 인해 $("#foo > div").length& 모두 $('#foo').children().length동일한 결과 ( jsfiddle )입니다. 그러나 'div'자녀 만 얻는 정답을 얻으려면 하나의 자녀 선택기를 사용하여 정확하고 나은 성능을 발휘해야합니다.


이 질문은 언젠가 다시 묻지 만, 지금부터 누군가를 도울 수 있도록 공유하고 싶었습니다
manikanta

'div'자식 만 필터링하는 위치는 어디입니까?
Andrey Tserkus

2
.length함수 호출의 오버 헤드가 없기 때문에 실제로 선호되는 방법입니다.
Nic Aitch

그러나 자식 선택기는 기본 CSS 선택기를 사용하기 때문에 정확하므로 선택은 JavaScript가 아닌 C ++로 작성됩니다. 성능 차이가 상당히 큽니다. 이 답변은 이해하기 쉽지만 훨씬 느립니다.
mdenton8

@manikanta 이봐, 매우 상세한 anser. 한 가지 질문을 귀찮게해서 죄송합니다. $('#extraLinks').children().size()div (extraLinks라는 이름의 div)에서 텍스트 상자를 세고 싶은 이유 4는 2 일 때만 얻는 이유입니다 . 일반적으로 길이에 2를 곱한 결과가 나타납니다. 감사합니다
slevin

25
$("#foo > div") 

하위
세트가 있으면 #foo 함수의 직계 자손 인 모든 div를 선택합니다 . size 함수를 사용할 수 있습니다.

$("#foo > div").size()

또는 당신은 사용할 수 있습니다

$("#foo > div").length

둘 다 같은 결과를 반환합니다



8

mrCoders에 대한 응답으로 jsperf를 사용하여 왜 dom 노드를 사용하지 않습니까?

var $foo = $('#foo');
var count = $foo[0].childElementCount

여기에서 테스트를 시도 할 수 있습니다 : http://jsperf.com/jquery-child-ele-size/7

이 방법은 46,095 op / s를 얻는 반면 다른 방법은 최고 2000 op / s를 얻는다


2
OP는 div 하위 요소 만 요청했습니다
dj18



5
var divss = 0;
$(function(){
   $("#foo div").each(function(){
    divss++;

   });
   console.log(divss);  
});     
<div id="foo">
  <div id="bar" class="1"></div>
  <div id="baz" class="1"></div>
  <div id="bam" class="1"></div>
</div>

3

최신 버전의 jquery에서는을 사용할 수 있습니다 $("#superpics div").children().length.


2
var n_numTabs = $("#superpics div").size();

또는

var n_numTabs = $("#superpics div").length;

이미 말했듯이 둘 다 동일한 결과를 반환합니다.
그러나 size () 함수는 더 많은 jQuery "PC"입니다.
내 페이지와 비슷한 문제가있었습니다.
지금은>를 생략하면 제대로 작동합니다.


후손 선택기 것입니다 반환 모든 자식, 손자, 증손자를 포함 #superpics의 후손, 등, 그 요소의뿐만 아니라 직접적인 아이
manikanta

더 많은 jQuery "PC". 의미합니까?
Ghanshyam Lakhani


-1

div 유형의 직계 자식 요소에 대해 이것을 시도하십시오

$("#foo > div")[0].children.length
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.