Javascript 设置innerHTML:Why won';它不更新DOM吗?
想知道为什么在重新分配变量时无法获取Javascript 设置innerHTML:Why won';它不更新DOM吗?,javascript,innerhtml,Javascript,Innerhtml,想知道为什么在重新分配变量时无法获取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.
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>
现在我对名为myDiv
的元素有了引用,我可以随时更新innerHTML
属性:
myDiv.innerHTML = "Hello" // innerHTML is now "Hello"
myDiv.innerHTML = "Goodbye" // Changed it to "Goodbye"
您应该将innerHTML值设置为
var myDivValue = document.getElementById("my_div").innerHTML = "Hello";
innerHTML
计算结果为字符串。我不知道你为什么会有不同的期望。考虑这一点:
var a = 'foo'; // now a = 'foo'
var b = a; // now a = 'foo', b = 'foo'
b = 'bar'; // now a = 'foo', b = 'bar'
重新分配b
不会改变a
编辑以添加:如果上述内容不清楚,如果要更改innerHTML
,您可以直接为其分配:
document.getElementById("my_div").innerHTML = "Hello";
您不需要,也不能使用中间变量
var myDivValue = document.getElementById("my_div").innerHTML;
存储innerHTML的值,innerHTML包含字符串值,而不是对象。因此,不可能引用元素。必须直接存储对象才能修改其属性
var myDiVElem = document.getElementById("my_div");
myDiVElem.innerHTML = 'Hello'; // this makes the change
设置innerHTML/outerHTML后,需要重新分配元素:
let indexInParent=[].slice.call(elem.parentElement.children).indexOf(elem);
elem.innerHTML=innerHTML;
elem=elem.parentElement.children[indexInParent];
对于未来的谷歌用户来说,我的问题是我把复数叫做复数
document.getElementsByClassName('class').innerHTML
所以它返回了一个数组,而不是一个元素。我把它改成单数
document.getElementByClassName('class').innerHTML
这使得我可以更新innerHTML值
innerHTML
返回一个字符串,而不是对DOM的引用。顺便说一句,您不必手动查询元素-只需通过调用this
参数将其引用传递给处理程序即可。对不起,我不明白this
在这种情况下是如何工作的。我尝试了console.log(document.this)
,但它只返回一个未定义的。
然后函数clicky(elem){elem.innerHTML=…
啊,我想我明白了。不能给对象的属性分配变量,只能给对象分配变量。对吗?似乎这样可以:var myDivValue=document.getElementById(“my_div”);myDivValue.innerHTML=“Hello”@nipponese:重新分配变量不会影响以前分配给它的任何内容。要写入var myDiv=document.getElementById(“my_div”);myDiv.innerHTML=…;
将在对象上设置innerHTML
属性,而myDiv
和document.getElementById(“my_div”)
specify;但是,例如,var myDiv=document.getElementById(“我的div”);myDiv=document.getElementById(“其他div”);
不会对document.getElementById(“我的div”)产生任何影响
,它只需更改myDiv
来指定不同的元素对象。@nipponese:只要想想innerHTML
是字符串类型的属性:您可以获取或放置字符串。另一方面,getElementById
返回一个引用,一个对象类型,就像您所想的。您可以在哪里设置myDivValue来返回包含“Bye”的字符串,然后将myDiVElem重新分配为等于“Hello”这个答案实际上与innerHTML
没有任何关系。另外,没有函数getElementByClassName
,因此这实际上没有帮助。请看……我指的是文档。getElementsByClassName
我假设它是从元素调用的。我已经为它更新了我的答案。以防出现任何混淆有一个document.getElementsByClassName
函数。
let indexInParent=[].slice.call(elem.parentElement.children).indexOf(elem);
elem.innerHTML=innerHTML;
elem=elem.parentElement.children[indexInParent];