Tôi đang gặp sự cố khi sử dụng shadow DOM cho một trong các thành phần web (giấy-bước) và nó yêu cầu sử dụng DOM mờ ám. Tôi không chắc sự khác biệt là gì và tại sao lại như thế.Sự khác biệt giữa DOM và bóng mờ DOM của Polymer là gì?
Trả lời
Here's giải thích lý do tại sao.
Tl; DR:
DOM bóng:
DOM bóng hoạt động bằng cách giấu cây DOM scoped từ chức năng cây đi bộ truyền thống và bộ truy xuất (childNodes, trẻ em, firstChild và do đó trên). Những người truy cập này chỉ trả về các phần tử trong phạm vi của bạn.
Điều này có nghĩa là nó ẩn một lớp phức tạp từ bạn. Một trong những ví dụ tôi tìm thấy trực tuyến là về thẻ <video></video>
. Nó giải thích làm thế nào bên trong nó có các điều khiển video, nhưng những điều đó được trừu tượng hóa và bạn không thể nhìn thấy chúng. Đây là những gì mà Shadow DOM thực hiện, nhưng đối với tất cả các thành phần web.
DOM bóng có vẻ tốt đẹp, nhưng có những hạn chế
- Đó là rất nhiều mã.
- Tất cả API DOM gián tiếp chậm.
- Các cấu trúc như NodeList có thể không được mô phỏng đơn giản.
- Có một số người truy cập nhất định không thể ghi đè (ví dụ: window.document, window.document.body).
- Các polyfill trả về các đối tượng không thực sự là nút, nhưng Node proxy, có thể rất khó hiểu.
Đây là nơi DOM râm đi kèm trong
Shady DOM:.
Shady DOM là một shim siêu nhanh cho DOM bóng cung cấp cây Phạm vi, nhưng có nhược điểm . Quan trọng nhất, người ta phải sử dụng các API DOM mờ ám để làm việc với cây có phạm vi.
Bằng cách sử dụng Shady DOM, bạn hiện không có chế độ xem tóm tắt về các thành phần. Bạn có thể thấy mọi thứ. Tuy nhiên với Shady DOM, bạn có thể kiểm tra như thế nào cây sẽ trông như thế nào nếu bóng DOM đã được sử dụng thay vì bằng cách chạy này:
var arrayOfNodes = Polymer.dom(YOUR_SELECTOR_GOES_HERE).children;
Vì vậy, tham gia tất cả thông tin này vào xem xét về cách DOMs công việc khác nhau, nó có vẻ như thành phần web-stepper giấy yêu cầu quyền truy cập vào toàn bộ cây để hoạt động chính xác. Vì Shadow DOM tóm tắt các phần tử bên trong, bạn phải sử dụng Shady DOM hoặc cấu trúc lại mã theo cách mà các phần tử bên trong không cần phải được truy cập từ bên ngoài trừu tượng.
- 1. Sự khác biệt giữa HTML và DOM
- 2. Sự khác biệt giữa offsetHeight và scrollHeight của một phần tử trong DOM là gì?
- 3. Sự khác biệt giữa chế độ đóng gói DOM đóng mở và đóng là gì?
- 4. Sự khác biệt giữa node.isSameNode (node1) và node === node1 trong DOM là gì?
- 5. sự khác biệt giữa window.element và nguyên tố là gì khi truy cập DOM yếu tố
- 6. Sự khác biệt giữa cây DOM trình duyệt và kết xuất cây là gì
- 7. Truy cập thuộc tính DOM bóng (polymer) bằng javascript/jquery?
- 8. Bộ sưu tập con của nút DOM - sự khác biệt là gì?
- 9. Sự khác biệt giữa: SAX Parser, XPath, DOM, XMLPullParser
- 10. sự khác biệt giữa ngSwitch và ngInclude là gì?
- 11. Polymer 1.0 dom-nếu vs ẩn
- 12. Sự khác nhau giữa DOM parentNode và parentElement
- 13. sự khác biệt giữa/* ... */và là gì/** ... */
- 14. Sự khác nhau giữa HTMLCollection và NodeList trong DOM là gì?
- 15. Sự khác biệt giữa phản ứng-router 4.0, phản ứng-router-dom và phản ứng-router-redux là gì?
- 16. Sự khác biệt chính xác giữa Polymer "reflectToAttribute" và "thông báo" là gì?
- 17. Sự khác biệt giữa Raphael và gRaphael là gì?
- 18. là gì sự khác biệt giữa SQL_Latin1_General_CP1_CI_AS và SQL_Latin1_General_CP1_CI_AI
- 19. Mức DOM là gì?
- 20. Sự khác biệt giữa while (true) và loop là gì?
- 21. Sự khác biệt giữa mờ và được đặt trong vba
- 22. sự khác nhau giữa DOMNodeInserted và DOMNodeInsertedIntoDocument là gì?
- 23. DOM và BOM trong JavaScript là gì?
- 24. Bóng DOM có nhanh như DOM ảo trong React.js không?
- 25. Sự kiện DOM không bong bóng trong phần tử ngoài DOM
- 26. Sự khác biệt giữa tính năng và nhãn là gì?
- 27. Sự khác biệt giữa dealloc và viewdidunload là gì?
- 28. Sự khác biệt chính giữa 'gc' và 'gccgo' là gì?
- 29. Sự khác biệt giữa addEventListener và attachEvent là gì?
- 30. Sự khác biệt giữa Tên và CanonicalName là gì?
Điều đó tùy thuộc vào việc bạn sử dụng chế độ mở hoặc đóng khi gắn cây bóng. – Antimony