首先,解决方案必须是纯 VanillaJS。
我有一个简单的 HTML 代码。
<div class="x">X</div>
<div class="x">Y</div>
<div class="x">Z</div>
还有一个 VanillaJS 代码。
document.addEventListener('DOMContentLoaded', function() {
var l = document.createElement('div');
l.innerHTML = "Hello World";
}, false);
当我尝试运行以下代码时:
document.getElementsByClassName('x')[0].appendChild(l);
我得到输出
X
Hello World
Y
Z
嗯,从技术上讲,这是正确的。但是,每当我尝试附加到数组的另一个成员时,它都不会按预期工作。
我试过了:
document.getElementsByClassName('x')[0].appendChild(l);
document.getElementsByClassName('x')[1].appendChild(l);
document.getElementsByClassName('x')[2].appendChild(l);
预期输出:
X
Hello World
Y
Hello World
Z
Hello World
实际输出
X
Y
Z
Hello World
根据我的观察,只考虑了代码的最后一行。控制台中没有错误,只是无法正常工作。
我尝试了另一种重新排列数组顺序的方案。
document.getElementsByClassName('x')[1].appendChild(l);
document.getElementsByClassName('x')[2].appendChild(l);
document.getElementsByClassName('x')[0].appendChild(l);
预期输出:
X
Hello World
Y
Hello World
Z
Hello World
实际输出:
X
Hello World
Y
Z
如您所见,只考虑最后一个追加,它不会追加到具有相同类名的其他元素上。
我也尝试循环它们,仍然没有运气。
完整代码:
<div class="x">X</div>
<div class="x">Y</div>
<div class="x">Z</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
var l = document.createElement('div');
l.innerHTML = "Hello World";
document.getElementsByClassName('x')[0].appendChild(l);
document.getElementsByClassName('x')[1].appendChild(l);
document.getElementsByClassName('x')[2].appendChild(l);
}, false);
</script>