jQuery를 사용하여 div의 하위 요소를 어떻게 반복합니까?


257

div가 있고 그 안에 여러 입력 요소가 있습니다 ... 각 요소를 반복하고 싶습니다. 아이디어?

답변:


476

children()및을 사용 each()하여 선택기를 선택적으로 전달할 수 있습니다.children

$('#mydiv').children('input').each(function () {
    alert(this.value); // "this" is the current element in the loop
});

직계 자식 선택기를 사용할 수도 있습니다.

$('#mydiv > input').each(function () { /* ... */ });

68
그런 다음 클로저에서 $ (this)를 사용하여 루프의 "현재"항목에 액세스하십시오.
amarsuperstar

1
@amarsuperstar : 정보를 추가하는 과정에있었습니다 :-)
Andy E

$ (this)가 부모의 "n"번째 자녀라고 가정하고 "n"의 가치를 알 수있는 방법이 있습니까?
Souvik Ghosh

1
@SouvikGhosh : 인덱스가에 대한 콜백 함수의 첫 번째 인수로 전달됩니다 each(). 위의 답변에 연결된 문서를 확인하십시오.
Andy E

55

또한 특정 컨텍스트 내에서 모든 요소를 ​​반복하는 것이 가능합니다.

$('input', $('#mydiv')).each(function () {
    console.log($(this)); //log every element found to console output
});

jQuery 'input'Selector에 전달되는 두 번째 매개 변수 $ ( '# mydiv')는 컨텍스트입니다. 이 경우 each () 절은 #mydiv의 직계 자식이 아닌 경우에도 #mydiv 컨테이너 내의 모든 입력 요소를 반복합니다.


1
아마도 중첩으로 인해이 솔루션은 저에게 효과적이지만 다른 솔루션은 그렇지 않았습니다. 이런 이유로 나는 이것이 일반적으로 더 나은 해결책이라고 생각할 것입니다.
arame3333

이것이 내가 찾던 것입니다. 그들의 가치에서 json을 만드는 방법은 무엇입니까? 테마를 모두 json으로 게시해야합니다.
Muhammad Saqib

8

자식 요소를 재귀 적 으로 반복 해야하는 경우 :

function recursiveEach($element){
    $element.children().each(function () {
        var $currentElement = $(this);
        // Show element
        console.info($currentElement);
        // Show events handlers of current element
        console.info($currentElement.data('events'));
        // Loop her children
        recursiveEach($currentElement);
    });
}

// Parent div
recursiveEach($("#div"));   

참고 : 이 예제에서는 객체에 등록 된 이벤트 핸들러를 보여줍니다.


5

이 방법으로도 수행 할 수 있습니다.

$('input', '#div').each(function () {
    console.log($(this)); //log every element found to console output
});

3
$('#myDiv').children().each( (index, element) => {
    console.log(index);     // children's index
    console.log(element);   // children's element
 });

이것은 모든 자식을 반복하며 인덱스 값을 가진 요소는 각각 elementindex를 사용하여 개별적으로 액세스 할 수 있습니다 .


1

children () 자체는 루프입니다.

$('.element').children().animate({
'opacity':'0'
});

1

나는 당신이 사용해야한다고 생각하지 않는다. each()표준 for 루프를 사용할 수있다.

var children = $element.children().not(".pb-sortable-placeholder");
for (var i = 0; i < children.length; i++) {
    var currentChild = children.eq(i);
    // whatever logic you want
    var oldPosition = currentChild.data("position");
}

당신은 루프에 대한 표준을 수있는이 방법은 같은 기능 breakcontinue기본적으로 작동

또한 debugging will be easier


내 경험은 루프 $.each()보다 항상 느리다는 것이며 이것이 for루프를 사용하는 유일한 대답입니다. 여기서 핵심은를 사용하여 대괄호 ( ) 표기법이 아닌 배열 .eq()내의 실제 요소에 액세스하는 것 입니다. children[]
elPastor
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.