前段时间在工作中遇到一个问题。我选取了一个元素节点,使用 innerHTML 和 outterHTML 都会插入失败(google 浏览器),但之前我又好像都能成功插入。后来问了我老大(某个资深全栈工程师),才发现当使用 innerHTML 和 outterHTML 插入元素节点时会先自动使用它们的 tostring 方法,所以会插入失败。看下面的例子:
1 | var txtEle = "<div>我是可以插入的</div>"; |
这个时候就会出现 插入的内容变成了
1 | [object HTMLDivElement] //我上面是div元素,所以是Div节点 |
这就是这个元素节点自动执行了它的 tostring()方法的结果,但这显而不是我们想要的效果。要想将这个元素节点插入到目标节点中,应该使用 appendChild()方法或者 insertBefore()方法。
appendChild()是在需要插入的 element 节点上调用,插入的节点将会成为该节点的最后一个子节点。
insertBefore()接受两个参数,第一个是待插入的节点,第二个是已存在的节点。
需要注意的是:
- 新节点插入在该节点前面,这个方法是在新节点的父节点调用。
- 如果调用 appendChild()和 insertBefore()将已存在文档的一个节点再次插入,
- 那个节点将自动从当前位置删除并在新位置重新插入
[越努力,越幸运!]