1. 程式人生 > >DOMException: Failed to execute 'insertBefore' on 'Node'

DOMException: Failed to execute 'insertBefore' on 'Node'

問題:
使用vue開發時,丟擲如下異常:

DOMException: Failed to execute ‘insertBefore’ on ‘Node’: The node before which the new node is to be inserted is not a child of this node.
(在“節點”上執行“insertBefore”失敗:要插入新節點的節點不是該節點的子節點。)

經資料查詢發現,導致上述異常是因為在html中使用了v-if來控制區域性顯隱導致的。

解釋:
在vue和大部分的mvvm的前端js框架中,基本都提供了類似 *-if 和 *-show的區域性顯隱控制指令,而這兩個指令在實際運用中是有區別的。

相同點:都可以實現區域性html(或者說是dom元素)的顯示和隱藏

不同點:顯示和隱藏的原理不同。對於*-show指令而言,當為false時不顯示控制的dom元素,其實就是display = none,只是將控制的dom元素給隱藏了,開啟控制檯除錯工具,仍然能夠看到被隱藏的程式碼。但是,對於 *-if指令而言,當為false時不顯示被控制的dom元素是因為被控制的dom元素被從dom中移除了,也就是說,開啟除錯工具後,你看不到被隱藏的程式碼。

解決方案
根據上面的解釋我們可以得出結論:在v-if為false時,如果我們後續的js操作了v-if控制的dom元素,將會因為該部分dom元素不存在而丟擲上述異常。