Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用insertBefore时出错&;在创建元素时追加子元素_Javascript - Fatal编程技术网

Javascript 使用insertBefore时出错&;在创建元素时追加子元素

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

试图在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 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工作得很好!非常感谢。根据文档,它复制了所有子项(属性等)。