変数を再割り当てしたときに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>
_
ログでは、クリックすると変数が再度割り当てられることがわかりますが、my_divのinnerHTMLは変更されていません。どうしてこれなの?
数年の経験を経て...
(私がそうであったように)ちょうど始めたばかりで、同じことを自分自身に問いかけていることに気付いた場合、理解する必要がある2つの重要な概念があります。
var myDivValue = element.innerHTML
_がinnerHTMLへの参照/アドレスを作成すると考え、その参照に新しい値を割り当てるたびに、コンテンツを更新するだけでしたが、それはそれがどのように機能するかではありません。element.innerHTML
_値(空白)のコピーを作成し、その値をmyDivValue
に割り当て、次に_myDivValue = "Hello";
_で、私はmyDivValue
に新しい値を割り当てていたため、_element.innerHTML
_が更新されることはありません。混乱する部分:JSで代入演算子(_=
_)を使用する場合、参照または値(_var referenceName = reference_to_thing
_と_var containerName = newValue
_)のどちらを代入するかは明確ではありません。
多くの人が答えで言ったように、これを行う正しい方法は、document.getElementById("my_div")
要素をmyDiv
に割り当てることです。
_var myDiv = document.getElementById("my_div")
_
そして、myDiv
と呼ばれる要素へのreferenceがあるので、好きなときにいつでもinnerHTML
プロパティを更新できます。
_myDiv.innerHTML = "Hello" // innerHTML is now "Hello"
myDiv.innerHTML = "Goodbye" // Changed it to "Goodbye"
_
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には、オブジェクトではなく文字列値が含まれます。したがって、elemを参照することはできません。プロパティを変更するには、オブジェクトを直接格納する必要があります。
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値を次のように設定する必要があります
var myDivValue = document.getElementById("my_div").innerHTML = "Hello";