我遇到了使用陰影DOM爲其中一個網絡組件(紙張分檔器)的問題,它需要使用陰影DOM來代替。我不確定區別是什麼,爲什麼是這樣。Polymer的陰影DOM與陰影DOM有什麼區別?
5
A
回答
9
Here's很好的解釋了爲什麼。
鉈; DR:
影子DOM:
影子DOM的工作原理是從傳統的 樹行走功能和存取隱藏範圍的DOM樹(的childNodes,孩子,則firstChild 等上)。這些訪問器只返回範圍內的元素。
這意味着它隱藏了一層複雜程度。我在網上找到的其中一個例子是關於<video></video>
標籤。它解釋了它內部的視頻控件,但是這些控件被抽象出來並且看不到它們。這就是Shadow DOM所做的,但是對於所有的Web組件。
影子DOM聽起來不錯,但也有侷限性
- 這是一個很大的代碼。
- 間接調用所有DOM API的速度很慢。
- 像NodeList的結構可以簡單地不被仿真。
- 有些訪問器不能被覆蓋(例如, window.document,window.document.body)。
- 該polyfill返回的對象實際上不是Nodes節點,而是代理節點 ,這可能非常令人困惑。
這就是黑幕DOM進來
黑幕DOM:
黑幕DOM是影子DOM提供 樹作用域超快墊片,但也有缺點。最重要的是,必須使用隱藏的DOM API來處理有限範圍的樹。
通過使用Shady DOM,您現在不具有組件的抽象視圖。你可以看到一切。然而,隨着黑幕DOM,你可以檢查樹會是什麼樣子,如果是被用來代替運行這個陰影DOM:
var arrayOfNodes = Polymer.dom(YOUR_SELECTOR_GOES_HERE).children;
所以,把所有這些信息考慮如何在不同的DOM工作,好像造紙步進式Web組件需要訪問整個樹才能正常工作。由於Shadow DOM抽象了內部元素,因此必須使用Shady DOM或重構代碼,以便內部元素不需要從抽象外部訪問。
相關問題
- 1. 陰影DOM
- 2. 查找陰影中的元素DOM
- 3. 什麼是陰影?
- 4. 在javascript中定義陰影DOM模板
- 5. 在Firefox中創建陰影根/ dom?
- 6. 試圖從外部設計陰影DOM
- 7. JavaScript不執行內部陰影DOM
- 8. Light DOM樣式「泄漏」到聚合物組件的陰影DOM
- 9. 陰影與GDlib
- 10. 在陰影內部和外部使用非陰影DOM自定義元素
- 11. 如何正確地將陰影DOM CSS選擇器轉換爲非陰影DOM選擇器
- 12. 沒有陰影
- 13. 沒有陰影
- 14. R陰影的陰影部分
- 15. OpenGL ES 2D陰影的陰影
- 16. 陰影
- 17. 陰影與標籤
- 18. 的postMessage到iFrame的陰影DOM有event.source集最晚將event.target鉻
- 19. 聚合物元素沒有陰影dom的造型封裝
- 20. 瀰漫陰影和ambiant陰影
- 21. OpenGL | ES添加陰影/陰影貼圖
- 22. 陰影路徑和陰影在PNG
- 23. 陰影質量(陰影痤瘡)
- 24. 捲曲檢索頁面沒有陰影dom
- 25. Angular 1.4查看封裝和陰影DOM - 有可能嗎?
- 26. CoreGraphics的陰影?
- 27. 顯示底部畫布與陰影效果 - 修剪區域內的陰影
- 28. CSS的效率與文字陰影一樣壞框陰影?
- 29. 的UILabel與陰影變化陰影偏移Autoshrinking
- 30. 如何設置一個盒子陰影的div元素的所有方面,左陰影,右陰影,頂部陰影,底部陰影?
這取決於您在連接陰影樹時是使用打開還是關閉模式。 – Antimony