大家好,
最近剛看到避免使用document.write()這篇文章
文中提到:不建議使用document.write(),
但如果真的有需求是要動態render從server傳回的html進現有DOM,
有什麼比較好的替換方案呢?
用Range().createContextualFragment()
let frag = document.createRange().createContextualFragment('<div><img src="https://picsum.photos/200/300" /></div>')
let updated = document.querySelector("#be_appended")
updated.appendChild(frag)
或DOMParser().parseFromString()
let frag = new DOMParser().parseFromString('<div><img src="https://picsum.photos/200/300" /></div>', "text/html")
https://developer.mozilla.org/en-US/docs/Web/API/Range/createContextualFragment
https://developer.mozilla.org/zh-TW/docs/Web/API/DOMParser
document.write的優點,也是其缺點。
優點就是它等同javascript的echo或是print的用法。
也就是它可以擔認其輸出的作用存在。簡單明白的處理。
但這也正是它的缺點。
其無法指定位置,無法將其做為一個dom來操作應用。
雖然輸出的資料,還可以用後置方式來處理為一個d端點來應用。
但這也就造成了document.write的麻煩性。也就是它是屬於無容器的對待。
(雖然是說無容器,但其實它還是屬於document容器的一種就是了)
簡單來說,如果今天只是擔存的輸出結果或畫面。無需做任何處理及操作的情況下。
使用document.write是一個很好的選擇沒錯。
但一般來說,最好還是用innerHTML來取代document.write會比較好。
畢竟document.write還是有其隱憂。
是的 我也想找辦法替代他 幸好剛剛找到 currentScript 可以用來指向目前執行的 node
只是要注意一下相容性 就是了
我已經很多年沒用document.write了,
其實你有需求的時候多google就會有答案了,
我記得jQuery的append也是可以塞html code下去的.