kiến thức [Event Tặng Title] Hướng dẫn học Javascript từ 0-> Nâng cao.

Mình học đến DOM có bị lỗi này có bác nào giải thích cho mình với.
Mình getElementByClassName thì dc 1 HTML colection cái item list 1 2 3 4. Mình dùng innerText, innerHTML để đổi tên lại thành Hello 1 2 3 4. Nếu mình gán từng phần tử items[1].innerText= hello 1 thì không báo lỗi. Nhưng nếu mình dùng vòng lập for thì sẽ bii báo lỗi như hình nhưng kết quả vẫn dc thực thi, vậy lý do lỗi ở đây là gì ạ?
2. Nếu mình dùng vòng lập và sủ dụng textContent thì ko bị báo lỗi và vẫn thực thi. Vậy tại sao có sự khác biệt này nhỉ?
yJ4MrMj.png

via theNEXTvoz for iPhone
 
Mình học đến DOM có bị lỗi này có bác nào giải thích cho mình với.
Mình getElementByClassName thì dc 1 HTML colection cái item list 1 2 3 4. Mình dùng innerText, innerHTML để đổi tên lại thành Hello 1 2 3 4. Nếu mình gán từng phần tử items[1].innerText= hello 1 thì không báo lỗi. Nhưng nếu mình dùng vòng lập for thì sẽ bii báo lỗi như hình nhưng kết quả vẫn dc thực thi, vậy lý do lỗi ở đây là gì ạ?
2. Nếu mình dùng vòng lập và sủ dụng textContent thì ko bị báo lỗi và vẫn thực thi. Vậy tại sao có sự khác biệt này nhỉ?
yJ4MrMj.png

via theNEXTvoz for iPhone
Gần 1 tháng rồi không biết bác đã tìm hiểu ra được lí do tại sao nó như vậy chưa nhưng vẫn xin giúp trả lời.
1/ Lí do của TypeError đó là do bác set điều kiện của vòng for với "i <= items.length". Do HTML Collection nó là array-like object, index của nó cũng là dạng zero-based, nên các phần tử của HTML Collection lúc này có index lần lượt là 0 1 2 3. Khi bác set "i <= items.length" thì i chạy tới 5, điều kiện sai nó mới kết thúc vòng lặp, mà ở i = 4 thì không có phần tử nào nên nó báo undefined.

2/ Bác có thể đọc thêm sự khác biệt giữa innerText và textContent ở bài viết này.
 
Em mới học về lập trình Web (HTML, CSS cơ bản, JS viết được mấy cái console.log và phép tính), nay em mới học đến DOM thì em hơi bị rối. Mong mn (dù mới học hay pro rồi) giải đáp giúp với ạ
Code:
const paragraphs = document.querySelectorAll("p");
// paragraphs[0] is the first <p> element
// paragraphs[1] is the second <p> element, etc.
alert(paragraphs[0].nodeName);
Thứ nhất là em vẫn chưa hiểu rõ lắm DOM là gì? Nếu search Google thì nó lại ra khái niệm DOM là web API gì đó, nhưng lúc đó lại có câu hỏi: API là gì???
Ví dụ trong đoạn code trên, thì document (có vẻ như là một object), sau đó dùng . để truy cập vào method của object đó là method querrySelectorAll(). Thì cái document, và method querrySelectorAll đó ở đâu ra vậy (mình không hề viết, cũng như không include/import gì như trong C++/Java mà tại sao vẫn dùng được), hay những object đó là JS có sẵn rồi?
Thứ hai là DOM có phải là một phần của NNLT JavaScript không? Có phải chỉ NNLT JS mới dùng/thao tác được với DOM không, hay các NNLT khác như C/C++ cũng có thể thao tác được với DOM? Tại sao lại hay dùng JS để thao tác với DOM?
Thứ nữa là tại sao phải có DOM? Theo như em tìm hiểu thì HTML sau khi được Web browser (Google Chrome, IE, FF) load thì sẽ tiến hành parse HTML -> biến thành một tree gồm các nodes, mỗi node là một object. Lí do bởi vì JS là một NNLT có OOP (tức sẽ thao tác với các object), việc parse HTML (chuyển từ elements/tage biến thành object) nhằm giúp JS thao tác được với các object này, qua đó sửa/xóa các object -> giúp website response được với interact của người dùng? Không biết em hiểu như này có đúng chưa?
 
Thứ hai là DOM có phải là một phần của NNLT JavaScript không? Có phải chỉ NNLT JS mới dùng/thao tác được với DOM không, hay các NNLT khác như C/C++ cũng có thể thao tác được với DOM? Tại sao lại hay dùng JS để thao tác với DOM?
ko, các ngôn ngữ khác vẫn có thể tương tác với DOM, b tìm hiểu thêm về webassembly, còn mấy cái trên b hiểu cơ bản là đúng r đấy
 
Back
Top