2015-10-02 15 views
5

Tôi không thể hiểu tại sao tôi không thể lấy các phần tử từ một HtmlCollection. Mã này ví dụ:Làm thế nào để bạn có được các yếu tố từ một HTMLCollection javascript

var col = (document.getElementsByClassName("jcrop-holder")); 
console.log(col); 

sản xuất sản lượng này trên console:

enter image description here

Tôi đang cố gắng để có được những đối tượng dic.jcrop-giữ nhưng tôi không thể có được nó từ col biến tôi. Không có tác phẩm nào trong số này hoạt động:

console.log(col[0]); // undefined 
    console.log(col.item(0)); // null 

    // check length of collection 

    console.log(col.length); // 0 

Vì vậy, nếu độ dài bằng 0 tại sao bảng điều khiển hiển thị độ dài 1, cũng như các đối tượng bên trong? Khi tôi mở nút, nó chứa trẻ em. Chuyện gì vậy?

Dưới đây là một số nút được mở rộng. Tôi đã không mở rộng div.jcrop.holder vì nó quá dài. Dưới đây là trẻ em yếu tố:

enter image description here

+1

Hãy thử 'document.getElementsByClassName (" jcrop-holder ") [0]' và 'document.querySelector (". jcrop-holder ")' – Tushar

+0

Bạn nên hiển thị cho chúng tôi mã đầy đủ của bạn (hoặc ít nhất là phần mà bạn sử dụng 'console.log' và một phần nơi bạn cố gắng sử dụng nó. Có vẻ như bạn đang thay đổi lớp đó giữa thời gian bạn đăng nhập vào bảng điều khiển và thời gian bạn đang cố gắng sử dụng nó. – Buzinas

+0

'getElementsByClassName' trả về bộ sưu tập _live_. Màu xanh nhỏ 'i' trong bảng điều khiển cho biết mảng sẽ được đánh giá _ khi bạn mở rộng nó_. Có một điều rõ ràng đang xảy ra giữa bạn lấy bộ sưu tập và 'console.log'ing các thuộc tính của nó, và bạn thực sự kiểm tra bộ sưu tập trong giao diện điều khiển. –

Trả lời

0

tôi đã phải đối mặt với cùng một vấn đề và giải pháp cho vấn đề này là để đặt kịch bản của tôi trong phần cuối của tài liệu, để chờ đợi để toàn bộ tài liệu được nạp trước bắt đầu thay đổi hoặc chọn các phần tử HTMLCollection. Hy vọng điều đó sẽ hữu ích.

2

Trích từ: Can't access the value of HTMLCollection

Vấn đề là bạn đã đặt kịch bản trong tiêu đề đó được thực hiện trước khi các yếu tố html được nạp, vì vậy getElementsByClassName() sẽ không trả lại bất kỳ yếu tố.

Một giải pháp là chờ đợi cho các yếu tố html được nạp sau đó thực hiện kịch bản của bạn, cho rằng bạn có thể sử dụng cửa sổ đối tượng sự kiện tải

window.addEventListener('load', function() { 
var eles = document.getElementsByClassName('review'); 
console.log(eles); 
console.log(eles.length); 
console.log(eles[0]); 
}) 

Hoặc bạn có thể đặt kịch bản của bạn ở dưới cùng của cơ thể thay vì ở đầu để cho đến khi tập lệnh được phân tích cú pháp và thực hiện các phần tử được tải trong dom

Các vấn đề liên quan