将一个分区的子元素与所有关联的事件一起复制到另一个分区
Copying children elements of one division to another along with all associated events
我正在尝试用另一个元素newparent
替换某个div元素parent
。我只想复制parent
的一些子项,并将它们放在newparent
中,然后用newparent
替换parent
。以下是我的代码片段:
var sb_button = parent.firstChild;
var temp;
while(sb_button) {
console.log("loop: ");
console.log(sb_button.id);
temp = sb_button;
if(sb_button.id != curr_button.id && sb_button.id != prev_button.id) {
console.log("if");
newparent.appendChild(temp);
}
else if(sb_button.id == curr_button.id) {
console.log("elseif");
newparent.appendChild(temp);
newparent.appendChild(prev_button);
}
else {
console.log("else");
}
sb_button.parentNode = parent;
console.log(sb_button.id)
console.log(sb_button.parentNode.children);
sb_button = sb_button.nextSibling;
}
parent.parentNode.replaceChild(newparent,parent);
编辑:
所以当我做newparent.appendChild(temp)
时,它会修改sb_button
。解决方法是什么?
我还没有运行您的代码,但有一些奇怪的事情,也许其中之一可能会导致问题,或者有助于清理代码,使问题更加明显。
- 变量
temp
似乎是sb_button
的别名:您可以删除变量声明并用temp
替换所有引用 sb_button
是任意子节点的混淆名称- 您正在if语句中将
sb_button
中的节点附加到newparent
,但就在您尝试将sb_button_.parentNode
设置为parent
之后-这是不可能的,因为parentNode
是只读的,当然没有意义-您不能将元素附加到一个元素,而是有一个不同的父元素 - 您正在尝试复制或移动节点吗
编辑:如果您想要复制节点,我相信您正在寻找cloneNode
:制作节点的副本并附加该副本,而不是原始节点。
作为一个干净的设计问题,当事情变得复杂时,我会避免这种难以推理的while循环。相反,只需创建一个节点数组,按照您想要的方式对这些节点进行排序(您甚至可以使用sort
来执行此操作,以立即表明您只是在重新排列),然后创建一个函数,该函数接受newparent
和数组,并将数组中所有元素的副本附加到newparent
。您的示例没有那么复杂,但即使在这里,我也会更改if子句的顺序,使其在最后的else中包含"default"大小写。例如:
for(var child = parent.firstChild; child; child = child.nextSibling)
if(child.id == curr_button.id) { //insert prev_button after curr_button
newparent.appendChild(child.cloneNode(true));
newparent.appendChild(prev_button.cloneNode(true));
} else if(child.id != prev_button.id) {
newparent.appendChild(child.cloneNode(true));
}
parent.parentNode.replaceChild(newparent, parent);
这样做的目的是让读者立刻明白,所有的孩子都被处理了一次。
相关文章:
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 设置滑块分区上的滚动
- 单击按钮后如何逐个调用分区,上一个分区将隐藏
- JQuery移动动态分区页面
- 多维数据集网格未在指定的分区中绘制
- 多维关联数组的最后一个索引
- node.js/javascript/couchdb视图到关联数组似乎不起作用
- 使用moment.js获取时间分区的偏移日期对象
- Rails——处理多态关联上的Ajax destroy调用
- 单击子分区外部时关闭灯箱
- 我想将链接关联到动态创建的p元素上的相应文章
- 如何在单击按钮时显示一个分区,同时隐藏另一个分区
- ExtJS 4:编写带有模型关联的嵌套XML
- 具有关联数组数据集的D3.js表
- Sequelize associations:set[Models]添加新模型,而不是关联现有模型
- JavaScript JSON关联对象键和值都作为日期时间戳
- 选择框中带有关联的ng模型,选项中带有ng重复
- 后关联数组使用jquery ajax
- Sequelize:属性之间的命名冲突'播放列表'以及关联'播放列表'
- 将一个分区的子元素与所有关联的事件一起复制到另一个分区