在javascript中设置父节点
Posted
技术标签:
【中文标题】在javascript中设置父节点【英文标题】:setting parent node in javascript 【发布时间】:2012-10-18 14:41:39 【问题描述】:当我通过执行 object.cloneNode(true) 在 javascript 中克隆对象时,新副本中的 parentNode 为空。 我试图设置它但没有成功。 我的代码如下所示:
old_DataRoot = DataRoot.cloneNode(true);
old_DataRoot.parentNode=DataRoot.parentNode.cloneNode(true);
也试过了:
old_DataRoot = DataRoot.cloneNode(true);
old_DataRoot.parentNode.appendChild(DataRoot.parentNode.cloneNode(true));
两个选项都给我“old_DataRoot.parentNode 为空或不是对象” 我做错了什么?
非常感谢, 女鬼。
【问题讨论】:
您的变量命名似乎很奇怪。为什么新克隆命名为old_DataRoot
?您可能应该描述一下您最终要完成的工作。
我要做的是备份原始 DataRoot 以便以后恢复。
为什么需要它来拥有.parentNode
?是不是你记得在哪里重新插入它?如果是这样,只需对父级进行变量引用。 var backup = DataRoot.cloneNode(true); var backup_par = DataRoot.parentNode;
稍后,您可以插入备份。 backup_par.appendChild(backup);
或者你可以从父母那里做一个.replaceChild
:backup_par.replaceChild(backup, DataRoot);
首先感谢您的回答。我想这样做的原因是,在我克隆 DataRoot 后,我想执行 DataRoot.selectSingleNode("//Users/*[@Id = \"" + NodeID + "\"]");
并且没有父级它似乎不起作用。 XML 看起来像这样 <Users> <User Id="m2" Email="" RealName="m2"/> <User Id="m3" Email="" RealName="m3"/> <User Id="m6" Email="" RealName="m6"/> <UsersSearch SearchText="m1"/> </Users>
【参考方案1】:
如果你正在尝试
对原始 DataRoot 进行备份以恢复它 稍后。
然后考虑
// Backup
var DataRootBackup =
nodes: DataRoot.cloneNode(true),
parent: DataRoot.parentNode
;
// Restore
DataRootBackup.parent.appendChild( DataRootBackup.nodes );
【讨论】:
非常感谢,效果很好。我唯一添加的是// Restore DataRootBackup.parent.removeChild(DataRoot); DataRootBackup.parent.appendChild(DataRootBackup.nodes); DataRoot=DataRootBackup.nodes;
【参考方案2】:
是的,没错,parentNode
是只读属性。
在第二种情况下,您需要知道只有一个节点附加到 DOM。 dataRoot
仍然具有父节点,克隆的结果(您称为 old_DataRoot
)未附加:
dataRoot.parentNode.appendChild(newDataRoot = dataRoot.cloneNode(true));
【讨论】:
【参考方案3】:这是你想要做的吗?
old_DataRoot = DataRoot.cloneNode(true);
DataRoot.parentNode.appendChild(old_DataRoot);
【讨论】:
以上是关于在javascript中设置父节点的主要内容,如果未能解决你的问题,请参考以下文章