在 JavaScript 中使用父容器包装多个元素的最简单方法

Lyn*_*son 3 html javascript

我想将header,main和元素包装在使用 JavaScript 创建的footer容器中。div换句话说,我想插入一个容器 div 作为body元素的直接子元素,但让它包裹所有的body子元素。

@import url( 'https://necolas.github.io/normalize.css/latest/normalize.css' );

::selection {
  background-color: #fe0;
  color: #444;
}

* {
  box-sizing: border-box;
  margin: 0;
}

html, body {
  height: 100%;
}

header, main, footer {
  height: 30%;
  margin-bottom: 1%;
  background-color: #444;
}

p {
  color: #ccc;
  text-align: center;
  position:relative;
  top: 50%;
  transform: translateY( -50% );
}

.container {
  height: 90%;
  padding: 2%;
  background-color: #eee;
}
Run Code Online (Sandbox Code Playgroud)
<html>
  <body>

    <header>
      <p>header</p>
    </header>
    
    <main>
      <p>main</p>
    </main>
    
    <footer>
      <p>footer</p>
    </footer>

  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我已经看到使用单个元素完成此操作replaceChild(),但没有像这里那样使用多个元素完成此操作。我不想在这里使用jquery。

有想法吗?

Pin*_*eda 5

  • 创建一个新的div

  • 获取节点列表document.querySelectorAll

  • 使用Array#forEach.callnodeList 来迭代它并将每个元素附加到新创建的 div 中

  • 将新的 div 附加到正文:

代码看起来像这样:

var newElem = document.createElement('div')
newElem.textContent = 'newElem';

Array.prototype.forEach.call(document.querySelectorAll('header, main, footer'), function(c){
  newElem.appendChild(c);
});
document.body.appendChild(newElem);
Run Code Online (Sandbox Code Playgroud)

这里是 JSBIN