Tôi là người mới bắt đầu về Javascript.
Tôi đang truy cập trang web thông qua window.onload
, tôi phải tìm các phần tử theo tên lớp của chúng ( slide
) và phân phối lại chúng thành các nút khác nhau dựa trên một số logic. Tôi có chức năng Distribute(element)
lấy một phần tử làm đầu vào và thực hiện phân phối. Tôi muốn làm điều gì đó như thế này (như được nêu, ví dụ ở đây hoặc ở đây ):
var slides = getElementsByClassName("slide");
for(var i = 0; i < slides.length; i++)
{
Distribute(slides[i]);
}
tuy nhiên điều này không làm điều kỳ diệu đối với tôi, bởi vì getElementsByClassName
không thực sự trả về mảng, mà là a NodeList
, là ...
... đây là suy đoán của tôi ...
... được thay đổi bên trong chức năng Distribute
(cây DOM đang được thay đổi bên trong chức năng này và việc sao chép các nút nhất định sẽ xảy ra). For-each
cấu trúc vòng lặp cũng không giúp ích gì.
Hành động của các slide thay đổi thực sự không xác định, qua mỗi lần lặp lại, nó thay đổi độ dài và thứ tự của các phần tử một cách điên cuồng.
Cách chính xác để lặp qua NodeList trong trường hợp của tôi là gì? Tôi đã nghĩ đến việc lấp đầy một số mảng tạm thời, nhưng không chắc chắn làm thế nào để thực hiện điều đó ...
BIÊN TẬP:
thực tế quan trọng mà tôi quên đề cập là có thể có một slide bên trong một slide khác, đây thực sự là những gì thay đổi slides
biến mà tôi vừa tìm ra nhờ người dùng Alohci .
Giải pháp cho tôi là sao chép từng phần tử vào một mảng trước và chuyển từng phần tử vào Distribute()
sau đó.
Distribute()
chức năng là để lâu dài và phức tạp để được sao chép ở đây, nhưng tôi chắc chắn rằng tôi đang thay đổi bên trong cấu trúc DOM, tôi cũng đang sao chép (nhân bản) các yếu tố đó. Khi tôi gỡ lỗi nó, tôi có thể thấy biến slides
thay đổi mỗi khi nó được chuyển vào bên trong.
getElementsByClassName()
trả về trực tiếp nodeList
, vì vậy các phần tử với lớp đó được thêm vào độ dài nodeList
mà bạn đang lặp lại các thay đổi.