Javascript 使用insertBefore时出错&;在创建元素时追加子元素
试图在body标签的顶部和底部都添加一个按钮,但是它只执行两个标签中最后一个。我是不是漏掉了什么明显的东西Javascript 使用insertBefore时出错&;在创建元素时追加子元素,javascript,Javascript,试图在body标签的顶部和底部都添加一个按钮,但是它只执行两个标签中最后一个。我是不是漏掉了什么明显的东西 var msg_node = document.createElement("a"); msg_node.setAttribute("onclick", "collapseAll()"); msg_node.setAttribute("href", "javascript:void(0)"); msg_node.setAttribute("class", "kc_button"); var
var msg_node = document.createElement("a");
msg_node.setAttribute("onclick", "collapseAll()");
msg_node.setAttribute("href", "javascript:void(0)");
msg_node.setAttribute("class", "kc_button");
var msg_textnode = document.createTextNode('COLLAPSE ALL');
msg_node.appendChild(msg_textnode);
document.getElementsByTagName('body')[0].appendChild(msg_node); // supposed to make button
document.body.insertBefore(msg_node, document.body.children[0]); // makes only this button
在第二次附加节点之前克隆节点:
var msg_node = document.createElement("a");
msg_node.setAttribute("onclick", "collapseAll()");
msg_node.setAttribute("href", "javascript:void(0)");
msg_node.setAttribute("class", "kc_button");
var msg_textnode = document.createTextNode('COLLAPSE ALL');
msg_node.appendChild(msg_textnode);
document.getElementsByTagName('body')[0].appendChild(msg_node); // supposed to make button
document.body.insertBefore(msg_node.cloneNode(true), document.body.children[0]); // makes only this button
可能重复-正如这里接受的答案所述,您只创建了一个元素。如果要创建两个,需要调用
createElement
两次。谢谢,这很有意义。我可以做一些类似于var msg\u node\u 2=msg\u node代码>或者我必须重复整个代码吗?您可以执行var msg\u node\u 2=msg\u node.cloneNode(true)正如马坦什的回答所指出的那样,通过克隆,我可以做类似于var msg\u node\u 2=msg\u node代码>?否,因为msg_节点是一个对象,将其引用复制到新变量中不会起作用。cloneNode工作得很好,试试吧。顺便说一下,cloneNode还会复制onclick、href和class属性,如果你担心的话。cloneNode工作得很好!非常感谢。根据文档,它复制了所有子项(属性等)。