為什麼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 |