Javascript 如何撤消DOM append()方法
Javascript 如何撤消DOM append()方法,javascript,html,dom,Javascript,Html,Dom,函数选择(){ document.getElementById('container').style.border=“2px实心红色”; } 函数pick(){ document.getElementById('container').appendChild(document.getElementById('item')); } #容器{ 高度:100px; 宽度:100px; 边框:1px纯黑; } #项目{ 高度:50px; 宽度:50px; 边框:1px纯黑; 背景:浅蓝色; } 选择容
函数选择(){
document.getElementById('container').style.border=“2px实心红色”;
}
函数pick(){
document.getElementById('container').appendChild(document.getElementById('item'));
}
#容器{
高度:100px;
宽度:100px;
边框:1px纯黑;
}
#项目{
高度:50px;
宽度:50px;
边框:1px纯黑;
背景:浅蓝色;
}
选择容器并单击项目以将其放置在容器上
容器
选我
您可以更改'pick'
功能,以检查项目是否在容器中,如果在容器中,请将其追加回正文中,如下所示:
function pick(){
var item = doucumentgetElementById('item');
var container = document.getElementById('container');
if (item.parentElement == container)
{
document.body.appendChild(item);
}
else
{
container.appendChild(item);
}
}
第一次单击时,项
被移动到容器
,第二次单击时,项被移回正文
,我认为您可以使用parentNode属性检查项div是否将容器div作为其父节点,如果是,则将其附加到正文中(或者附加到需要的任何位置)。如果项目节点父节点不是容器,则将其附加到容器中
另一种解决方案:
保存document.getElementById('container').parentNode.innerHTML的副本,即使您可以将其保存到一个数组中,它也可以支持一步一步撤消
然后在重置时,将其重新分配(如果将多个副本保存到一个数组中,请使用最后一个副本分配,然后将其弹出)
如下图所示:
let cloned=[]
克隆的.push(document.getElementById('container').parentNode.innerHTML)
函数选择(){
克隆的.push(document.getElementById('container').parentNode.innerHTML)
document.getElementById('container').style.border=“2px实心红色”;
}
函数pick(){
克隆的.push(document.getElementById('container').parentNode.innerHTML)
document.getElementById('container').appendChild(document.getElementById('item'))
}
函数重置(){
cloned&&cloned.length>0&(document.getElementById('container')。parentNode.innerHTML=cloned[0])
克隆=[cloned[0]]
}
函数undo(){
cloned&&cloned.length>0&(document.getElementById('container').parentNode.innerHTML=cloned[cloned.length-1])
cloned.pop()
}
#容器{
高度:100px;
宽度:100px;
边框:1px纯黑;
}
#项目{
高度:50px;
宽度:50px;
边框:1px纯黑;
背景:浅蓝色;
}
重置
撤消
选择容器并单击项目以将其放置在容器上
容器
选我
函数选择(){
document.getElementById('container').style.border=“2px实心红色”;
}
函数pick(){
if(document.getElementById('container')。包含(document.getElementById('item'))
{
var item=document.getElementById('item').cloneNode(true);
document.getElementById(“容器”).removeChild(document.getElementById(“项”));
document.getElementById('example').appendChild(项);
}
其他的
document.getElementById('container').appendChild(document.getElementById('item'));
}
#容器{
高度:100px;
宽度:100px;
边框:1px纯黑;
}
#项目{
高度:50px;
宽度:50px;
边框:1px纯黑;
背景:浅蓝色;
}
选择容器并单击项目以将其放置在容器上
容器
选我
我认为这是唯一的方法
var保存删除;
函数选择(){
document.getElementById('container').style.border=“2px实心红色”;
document.getElementById('container').removeChild(savedElement);
document.getElementById('container')。在(savedElement)之后;
}
函数pick(){
savedElement=document.getElementById('item');
document.getElementById('container').appendChild(savedElement);
}
#容器{
高度:100px;
宽度:100px;
边框:1px纯黑;
}
#项目{
高度:50px;
宽度:50px;
边框:1px纯黑;
背景:浅蓝色;
}
选择容器并单击项目以将其放置在容器上
容器
选我
您可以执行以下操作:
函数选择(){
document.getElementById('container').style.border=“2px实心红色”;
}
//用于跟踪位置的布尔值
var内=假;
函数pick(){
如果(!内部){
document.getElementById('container').appendChild(document.getElementById('item'));
var getMeHere=document.getElementById('getMeBackHere');
}
否则{
var pickMe=document.getElementById('container');
document.getElementById('getMeBackHere').appendChild(document.getElementById('item'));
}
内部=!内部;
}
#容器{
高度:100px;
宽度:100px;
边框:1px纯黑;
}
#项目{
高度:50px;
宽度:50px;
边框:1px纯黑;
背景:浅蓝色;
}
选择容器并单击项目以将其放置在容器上
容器
选我
检查我发布的答案可能重复。希望有帮助。