使用JavaScript将DOM元素添加到Body的最佳方法

时间:2016-02-26 15:15:17

标签: javascript jquery css innerhtml appendchild

我需要在每个页面放置此代码:

document.body.innerHTML += '<div style="position:fixed; text-align:center; left:30px; widht: 200px;bottom: -12px;"> <div class="card" style="position: relative;background: #EC2D2D;border-radius: 5px;padding: 20px 0 0px 0;box-sizing: border-box;box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12), 0 1px 3px rgba(0, 0, 0, 0.24);-webkit-transition: .3s ease;transition: .3s ease;"> <h1 class="title" style="position: relative;z-index: 1;border-left: 5px solid #FFFFFF;margin: 0 0 25px;padding: 10px 0 10px 10px;color: #FFFFFF;font-size: 32px;font-weight: 600;/* text-transform: uppercase; */">50% less</h1> <div class="button-container" style="margin: 0 20px;text-align: center;"> <button style="outline: 0;cursor: pointer;position: relative;display: inline-block;background: 0;color: #EC2D2D;background: #fff;width: 170px;border: 2px solid #C70A0A; padding: 10px 0;font-size: 14px;font-weight: 600;line-height: 1;text-transform: uppercase;overflow: hidden;-webkit-transition: .3s ease;transition: .3s ease;"><span>Bid and Book Now</span></button> </div> <div class="footer" style="margin: 20px 0 0;color: #FFFFFF !important;font-size: 14px;font-weight: 100;text-align: center;"> <p style="color: inherit;text-decoration: none;-webkit-transition: .3s ease;transition: .3s ease;">BEST RATES - only on website</p> <p style="font-size: 10px;">End in: 1d 2h 33m</p></div> </div> <div class="card alt" style="position: absolute;top: 40px;border: 3px solid #ED2553;right: -40px;z-index: 10;width: 80px;height: 80px;background: #FFFFFF;background-image: url(&quot;http://i.imgur.com/32T7CPH.jpg&quot;);border-radius: 100%;box-shadow: none;padding: 0;-webkit-transition: .3s ease;transition: .3s ease;"> </div> </div> ';

此代码在每个页面都不能正常工作。此外,我认为它非常慢并且对某些页面造成问题。如何用appendChild或类似的东西写这个?

我无法使用JQuery的append,因为我必须使用纯JavaScript代码。

使用appendChild时,此代码会是什么样的?

2 个答案:

答案 0 :(得分:3)

方法 appendChild获取一个节点并将此节点添加到调用它的元素。

var node = document.createElement("DIV");  
var textNode = document.createTextNode("My Div content");
node.appendChild(textNode);
document.body.appendChild(node); 

您不能将appendChild与包含整个html的字符串一起使用。

您可以做的是创建一个节点。使用巨大的字符串设置其innerHTML。然后将节点附加到正文。

代码应与此类似:

var content = ....
var newNode = document.createElement("DIV");  
newNode.innerHTML = content;
document.body.appendChild(newNode); 

答案 1 :(得分:1)

在vanilla js中,您可以使用.appendChild,它将添加到作为参数传递的节点的元素调用者。

在你的情况下(用一个字符串作为要插入的dom元素)你可以做到这一点:

var el = document.createElement("div");
    el.innerHTML = "<your dom code>";

while (el.firstChild) document.body.appendChild(el.firstChild);

这有点粗鲁但是这样你就可以创建一个元素,用你的字符串dom填充它,然后将每个孩子移动到document.body

JsFiddle为例,使用您的代码