Dobrze sprawdza się też childElementCount
on-line
<button></button>
<script>
console.clear();
const button = document.querySelector('button');
IsChildNode('Przed dodaniem tekstu do button-a');
setTimeout(() => {
button.textContent = 'Lorem';
IsChildNode('Po dodaniu tekstu do button-a');
}, 1000);
setTimeout(() => {
button.innerHTML += ' <span style="color:red">ipsum</span>';
IsChildNode('Po dodaniu elementu <span> do button-a');
}, 2000);
function IsChildNode(message = null) {
console.info(message);
if (button.children[0] == undefined ) {
console.log("undefined działa!", button.children[0]);
}
if (! button.hasChildNodes()) {
console.log("hasChildNodes działa!", button.hasChildNodes());
}
if (button.childNodes.length == 0) {
console.log("childNodes.length działa!", button.childNodes.length);
}
if (button.firstChild == null) {
console.log("firstChild działa!", button.firstChild);
}
if (button.children.length == 0) {
console.log("children.length działa!", button.children.length);
}
if (button.childElementCount == 0) {
console.log("childElementCount działa!", button.childElementCount);
}
}
</script>
Zamiast pętli while proponuje użyć setInterval
<button></button>
<script>
console.clear();
const button = document.querySelector('button');
IsChildNode('Przed dodaniem tekstu do button-a');
setTimeout(() => {
button.textContent = 'Lorem';
IsChildNode('Po dodaniu tekstu do button-a');
}, 1000);
setTimeout(() => {
button.innerHTML = 'Lorem <span style="color:red">ipsum</span>';
IsChildNode('Po dodaniu elementu <span> do button-a');
}, 2000);
const is_child_node = setInterval(() => {
IsChildNode('Sprawdzam ...');
}, 100);
function IsChildNode(message = null) {
if (button.childElementCount == 0) {
console.clear();
console.info(message);
console.log("childElementCount działa!", button.childElementCount);
} else {
console.info(message, 'Stop');
clearInterval(is_child_node);
}
}
</script>
[ javascript - while vs. setInterval ]