我正在尝试创建一个包含两个不同方面的页面,为此我设置了两个ID为leftSide
和rightSide
的不同div。
首先,我将图像节点添加到leftSide
五次。
然后,我将leftSide
克隆到rightSide
div,我想删除rightSide
中的最后一张图片,这样总共我左边有五张图片,四张图片图片在右边。
但是,我的代码只删除了左侧的所有五个图像,而不仅仅是最后一个:
function createSmile() {
for (var i = 0; i < 5; i++) {
var newImg = document.createElement("img");
newImg.src = "smile.png";
var imgPart = document.getElementById("leftSide");
imgPart.appendChild(newImg);
}
document.getElementById("rightSide").appendChild(document.getElementById("leftSide").cloneNode(true));
document.getElementById("rightSide").removeChild(document.getElementById("rightSide").lastChild);
}
答案 0 :(得分:0)
这是因为rightSide只有一个孩子,它是leftSide的克隆。所以你要删除孩子,但你要做的就是删除孙子。
考虑使用这个:
document.getElementById("rightSide").removeChild(document.getElementById("rightSide").children[0].lastChild);
希望工作如果你从谷歌浏览器查看你的html源代码以了解javascript产生的内容也会更好
答案 1 :(得分:0)
您将#leftSide
克隆到#rightSide
,因此#rightSide
只有一个孩子。然后你只从一个孩子那里删除最后一个。
解决方案就在这里
function createSmile() {
for (var i = 0; i < 5; i++) {
var newImg = document.createElement("img");
newImg.src = "smile.png";
leftSide.appendChild(newImg);
rightSide.appendChild(newImg.cloneNode(true));
}
//Here you clone WHOLE <div id="leftSide"></div> into <div id="rightSide"></div>
//document.getElementById("rightSide").appendChild(document.getElementById("leftSide").cloneNode(true));
rightSide.removeChild(rightSide.lastChild);
}
答案 2 :(得分:0)
克隆节点时,将克隆整个HTML块。例如,当您克隆leftSide
并将其附加到rightSide
时,您要追加的是:
<div id="leftSide">
<img src="smile.png">
<img src="smile.png">
<img src="smile.png">
<img src="smile.png">
<img src="smile.png">
</div>
注意leftSide
div也被复制了?这不仅是因为你现在有两个具有相同ID的元素,而且现在只有一个子节点,即div,它包含所有图像。
基本上你想要的只是复制leftSide
的子节点。有很多方法可以做到这一点:
如果您使用的是jQuery等内容,则可以使用$("#leftSide").children().clone()
克隆所有子元素;
您可以获取子节点数组(document.getElementById("leftSide").childNodes
),循环遍历它,并克隆每个节点;
您可以简单地将图像节点添加到初始循环中的两个div中;
您还可以复制原始内部HTML:document.getElementById("rightSide").innerHTML = document.getElementById("leftSide").innerHTML
这些只是你解决这个问题的一些方法。 Google上还有更多内容。