Интересно, почему я не могу получить 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>
В журнале я вижу, как переменная переопределяется при нажатии, но innerHTML my_div остается неизменным.Почему это так?
После нескольких лет опыта ...
Для тех, кто только начинает (как я) и обнаружил, что спрашивает то же самоеЕсть два важных понятия, которые необходимо понять:
- Назначить по ссылке: Моя ошибка заключалась в том, что я думал, что
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
, я могу обновить свойство innerHTML
, когда захочу:
myDiv.innerHTML = "Hello" // innerHTML is now "Hello"
myDiv.innerHTML = "Goodbye" // Changed it to "Goodbye"