I want to change the text of an h2 nested under a div by manipulating DOM on Javascript (and without making changes to the HTML file).
HTML:
<div id="button">
<h2>Click me</h2>
</div>
I tried both getElementsByTagName and firstElementChild but only firstElementChild works.
firstElementChild works here:
window.onload = function pageLoaded(){
const button = document.getElementById("button");
const clickMe = button.firstElementChild;
button.onclick = changeText;
function changeText(){
clickMe.innerHTML = "You clicked me";
console.log(clickMe);
}
}
but when getElementsByTagName is used, "You clicked me" wouldn't appear on the webpage:
window.onload = function pageLoaded(){
const button = document.getElementById("button");
const clickMe = button.getElementsByTagName("h2");
button.onclick = changeText;
function changeText(){
clickMe.innerHTML = "You clicked me";
console.log(clickMe);
}
}
The innerText of the HTMLCollection would be updated as "You clicked me" in the console. But why wouldn't it also be updated on the webpage?
Addition question: why does firstElementChild only work here when it is under the window.onload event listener? If I take window.onload away, I get the "cannot get properties of null" error for firstElementChild.