Làm cách nào để lặp lại các phần tử con của div bằng jQuery?


257

Tôi có một div và nó có một số yếu tố đầu vào trong đó ... Tôi muốn lặp lại qua từng yếu tố đó. Ý tưởng?

Câu trả lời:


476

Sử dụng children()each(), bạn có thể tùy ý chuyển một bộ chọn đểchildren

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

Bạn cũng có thể chỉ cần sử dụng bộ chọn con ngay lập tức:

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

68
sau đó sử dụng $ (this) trong bao đóng để truy cập vào mục "hiện tại" trong vòng lặp.
amarsuperstar

1
@amarsuperstar: chỉ trong quá trình thêm thông tin đó :-)
Andy E

Có cách nào để biết giá trị của "n", giả sử $ (đây) là con "n" của cha mẹ không?
Souvik Ghosh

1
@SouvikGhosh: chỉ mục được truyền làm đối số đầu tiên cho hàm gọi lại cho each(). Kiểm tra các tài liệu, liên kết trong câu trả lời ở trên.
Andy E

55

Cũng có thể lặp lại qua tất cả các yếu tố trong một bối cảnh cụ thể, không rõ ràng chúng được lồng sâu như thế nào:

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

Tham số thứ hai $ ('# mydiv') được truyền cho Bộ chọn 'đầu vào' của jQuery là bối cảnh. Trong trường hợp này, mệnh đề Each () sẽ lặp qua tất cả các phần tử đầu vào trong vùng chứa #mydiv, ngay cả khi chúng không phải là con trực tiếp của #mydiv.


1
Có lẽ vì lồng nhau, giải pháp này hiệu quả với tôi trong khi giải pháp kia thì không. Vì lý do đó tôi sẽ nghĩ rằng đây thường là giải pháp tốt hơn.
arame3333

Đây là những gì tôi đang tìm kiếm. Bất kỳ cách nào để làm cho json từ các giá trị của họ? Tôi cần phải đăng tất cả các chủ đề như json.
Muhammad Saqib

8

Nếu bạn cần lặp qua các phần tử con một cách đệ quy :

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"));   

LƯU Ý: Trong ví dụ này tôi hiển thị các trình xử lý sự kiện đã đăng ký với một đối tượng.


5

Nó cũng có thể được thực hiện theo cách này:

$('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
 });

Điều này lặp lại thông qua tất cả các phần tử con và phần tử của chúng với giá trị chỉ mục có thể được truy cập riêng bằng cách sử dụng phần tửchỉ mục tương ứng.


1

trẻ em () là một vòng lặp trong chính nó.

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

1

Tôi không nghĩ rằng bạn cần sử dụng each(), bạn có thể sử dụng tiêu chuẩn cho vòng lặp

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");
}

bằng cách này, bạn có thể có tiêu chuẩn cho các tính năng vòng lặp như breakcontinuehoạt động theo mặc định

cũng vậy, debugging will be easier


Kinh nghiệm của tôi $.each()là luôn luôn chậm hơn một forvòng lặp, và đây là câu trả lời duy nhất sử dụng nó. Chìa khóa ở đây là sử dụng .eq()để truy cập phần tử thực trong childrenmảng và không phải []ký hiệu ngoặc ( ).
elPastor
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.