Javascript 为什么赢了';这个脚本是否附加了一个子div元素?
当我单击带有onclick属性的p元素调用make_子函数时,我希望它在单击时附加一个div元素,但它只是在段落元素中附加一个文本节点,这是什么原因Javascript 为什么赢了';这个脚本是否附加了一个子div元素?,javascript,Javascript,当我单击带有onclick属性的p元素调用make_子函数时,我希望它在单击时附加一个div元素,但它只是在段落元素中附加一个文本节点,这是什么原因 <script type="text/javascript"> function make_child(text, id, type) { var text = document.createTextNode(text); var target = document.getElementById(id); var
<script type="text/javascript">
function make_child(text, id, type) {
var text = document.createTextNode(text);
var target = document.getElementById(id);
var add = document.createElement(type);
var addtext = add.appendChild(text);
target.appendChild(addtext);
}
</script>
<p id="changeme" onclick="make_child('I have changed', 'changeme', 'div')">Click me to change</p>
函数make_child(文本、id、类型){
var text=document.createTextNode(文本);
var target=document.getElementById(id);
var add=document.createElement(类型);
var addtext=add.appendChild(文本);
target.appendChild(addtext);
}
单击我进行更改
尝试执行target.appendChild(add)
而不是target.appendChild(addtext)
编辑(更多详细信息):
appendChild
(来自MDN)的语法为:
其中child
是要追加的元素。在这种情况下,addtext=add.appendChild(text)
被设置为text
,而不是add
。只要执行target.appendChild(add)
就可以解决这个问题
这也意味着变量addtext
是无用的;您可以删除它,只留下
add.appendChild(text)
对于该行。将最后一行更改为该行
target.appendChild(add);
现在,您将添加到正确的元素错误控制台会说什么?我很确定它在说些什么。在var text赋值时,它给了我一个无效的语法错误,所以我将该变量改为text_a,现在我没有错误,但它仍然只是在元素中附加textnode而不是元素,带有text节点..啊,对不起,我忽略了
text
是一个文本节点。您的changeme
元素在哪里?在传递给函数的文本节点后面附加的add变量是如何添加的?您创建了add
作为一个div,并将文本附加到它,现在获取目标并将add
div附加到它。在appendChild()返回所附加内容之前,我不知道您的代码是如何工作的。我以前不知道。添加变量是如何将文本节点附加到传递给函数的?您的问题并不完全清楚add
是对附加内容的html元素的引用。调用add.appendChild(text)
时,add
本身会发生变化。这意味着,当您将其传递给target.appendChild
时,您传递的是包含已添加节点的新更改版本。但是创建的textnode何时附加到已创建的div元素?行addtext=add.appendChild(text)
。这行实际上做了两件事:它将addtext
设置为text
,并将text
附加到add
。基本上,add.appendChild(text)
的一个副作用是,text
被附加到add
,而不考虑赋值(addtext=…
)。基本上,是的:毕竟,您使用的是文档对象模型(DOM)。
target.appendChild(add);