在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); 或者你可以从父母那里做一个.replaceChildbackup_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中设置父节点的主要内容,如果未能解决你的问题,请参考以下文章

当字符串包含html实体时,在Javascript中设置文本节点的nodeValue

JavaScript中DOM操作元素及节点操作

窗口置父以后怎么不让子窗口移动来移动去

在父级中反应handleClick

需要 ID 属性名称的 Vapor 4 关系和模型

在 Express 中设置默认响应标头