想知道为什么我document.getElementById("my_div").innerHTML在重新分配变量时无法更新DOM.例如:
<div id="my_div" onclick="clicky();">
Bye.
</div>
<script type="text/javascript" charset="utf-8">
function clicky() {
var myDivValue = document.getElementById("my_div").innerHTML;
myDivValue = "Hello";
console.log(myDivValue);
}
</script>
Run Code Online (Sandbox Code Playgroud)
在日志中,我可以看到变量在我点击时重新分配,但my_div的innerHTML保持不变.为什么是这样?
经过几年的经验......
对于刚开始的人(就像我一样)并发现自己也在问同样的事情,有两个重要的概念需要理解:
var myDivValue = element.innerHTML会为innerHTML创建一个引用/地址,每次我为该引用分配一个新值时,我都可以更新内容,但这不是它的工作原理.element.innerHTML值的副本(这是空白的)并将值赋给myDivValue,然后在myDivValue = "Hello";,我正在分配一个新值myDivValue,所以当然它永远不会更新element.innerHTML.令人困惑的部分:当=在JS中使用赋值运算符()时,你不是要明确指定引用或值(var referenceName = reference_to_thingvs. var containerName = newValue),
正如许多人在答案中所说,正确的方法是将document.getElementById("my_div")元素分配给myDiv:
var myDiv = document.getElementById("my_div")
Run Code Online (Sandbox Code Playgroud)
现在我有一个对被调用元素的引用myDiv,我可以随时更新innerHTML属性:
myDiv.innerHTML …Run Code Online (Sandbox Code Playgroud)