'innerHTML'和'appendChild'之间的区别

Nig*_*iri 6 html javascript google-chrome google-chrome-devtools

观察Chrome DevTools中的节点数量,我想知道点击Button1之后dom树的差异以及点击Button2之后的差异.

的index.html

<html>
<head>
    <script src="./js/main.js" type="text/javascript" charset="utf-8"></script>
    <link rel="stylesheet" href="style/default.css">
</head>
<body>
    <div id="buttons">
        <div class="button" id="button1">Execute1</div>
        <div class="button" id="button2">Execute2</div>
    </div>    
    <div id="main"></div>
    <div id="main2"></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

main.js

document.addEventListener( "DOMContentLoaded", function() {
    var button1 = document.getElementById('button1');
    button1.addEventListener('click', function() {
        document.getElementById('main').innerHTML += '<div>hello</div>';
    });

    var button2 = document.getElementById('button2');
    button2.addEventListener('click', function() {
        var div = document.createElement('div');
        div.appendChild(document.createTextNode('hello2'));
        document.getElementById('main2').appendChild(div);
    });
} );
Run Code Online (Sandbox Code Playgroud)

default.css

#buttons {
    display:-webkit-flex;
    align-items: center;    
}

.button {
    height: 30px;
    width: 100px;
    margin: 5px;
    background-color: #0080C0;
    color: #FFFFFF;
    display:-webkit-flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
}
Run Code Online (Sandbox Code Playgroud)

当我单击Button1时,节点数增加4.
但是当我单击button2时,节点数增加2.
增加2对我来说是有意义的,因为它们可能是一个'div'元素和一个文本节点'hello2'.
但是单击Button1,还会添加其他节点?

在此输入图像描述

Que*_*tin 8

使用appendChild将新DOM元素添加到父节点的末尾.

使用innerHTML +=父节点的现有DOM内容,将其序列化为字符串中的HTML,将更多HTML添加到字符串的末尾,擦除父节点中的现有元素,从该字符串生成DOM元素,然后附加新元素节点到父节点.