為什麼DOM不提供insertAfter()方法?
如題,為何DOM中只提供了insertBefore方法 而不提供insertAfter方法。
DOM早已不在是那個DOM,而你還是哪個你
其實大家對DOM的掌握,都停留在開始階段,比如後面新增的萬能的 insertAdjacentElement ,想往哪插就往哪插,但是這個api真是反人類
於是現在的dom通過ChildNode介面,新增了after和before介面,也就是說,你可以直接在某個節點之前之後插入,再也不需要通過父節點
var parent = document.createElement("div");
var child = document.createElement("p");
parent.appendChild(child);
var span = document.createElement("span");
child.after(span);
console.log(parent.outerHTML);
// "&&
&
&&&MDN: ChildNode.after()
類似的的還有:
- before 取代parentNode.insertBefore
- after 取代 null
- remove 取代parentNode.removeChild
- replaceWith 取代parentNode.replaceChild
可能是因為有了 appendChild 之後,你就可以插入到任何位置了(逃
前端都知道:DOM API 反人類。
可能是懶,也可能是設計者偏執的潔癖。雖然我們可以自己實現,但為什麼不替我們省點事呢?數組對象的大多數方法都可以在DOM上實現
瀉藥
實話說,看起來是規範提供者覺得 insertBefore 就夠用了。
如果 inserAfter 只需要
parentNode.insertBefore(newNode, node.nextSibling);
即為 node 的 after 插入
同時規定了 nextSibling 返回值為 null 就是向 parentNode 最後 append (同appendChild)
appendChild 和 insertBefore的組合使用已經足夠了吧..
話說,根據MDN的文檔和DOM Standard,appendChild只是給insertBefore這個動作設了個第二個參數默認為null,而規範里只規定了Before,大概是圖省事吧。
insertAdjacentElement
可能作者覺得同樣的原理沒有必要造兩個輪子吧,而且通過insertBefore寫一個insertAfter()也的確挺簡單的
自己封裝一個函數 JavaScriptdom編程藝術裡面有現成的
懶
推薦閱讀:
※children.length和childElementCount?
※如何理解js高程里的document對象是HTMLDocument的實例?
TAG:前端開發 | JavaScript | DOM |