Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 设置子对象的属性<;部门>;在克隆节点内_Javascript_Clone_Clonenode - Fatal编程技术网

Javascript 设置子对象的属性<;部门>;在克隆节点内

Javascript 设置子对象的属性<;部门>;在克隆节点内,javascript,clone,clonenode,Javascript,Clone,Clonenode,我已经克隆了一个节点,但我想在克隆的节点内设置或更改div的属性,特别是更改div id=“test0” 我找不到任何关于这个的文档,有没有纯JavaScript的人知道解决方案 var c = document.getElementById("stone-opt0"), cloned = c.cloneNode(true); //CODE THAT DOESN'T WORK cloned.getElementById("test0").id = "new-id"; 我正在做的是循环浏览一个

我已经克隆了一个节点,但我想在克隆的节点内设置或更改div的属性,特别是更改
div id=“test0”

我找不到任何关于这个的文档,有没有纯JavaScript的人知道解决方案

var c = document.getElementById("stone-opt0"),
cloned = c.cloneNode(true);

//CODE THAT DOESN'T WORK
cloned.getElementById("test0").id = "new-id";

我正在做的是循环浏览一个大的项目列表,并将这些项目放入一个文档片段中,然后将其推送到页面上一次。。。我这样做,而不是将每个元素添加到页面,然后在附加到DOM后进行修改(这会更快,不是吗?

在附加到DOM后,您是否尝试过执行
克隆.getElementById(“test0”).id=“new id”
getElementById()
如果您正在寻找不属于DOM的内容,则可能会很挑剔。当我说“挑剔”时,我的意思是“一般来说,全力以赴是行不通的。”


您可以尝试在页面上创建一个隐藏元素(如
),并将
克隆的
附加到该元素上,以便在准备好之前它不会显示在页面上。

您尝试在元素节点的上下文上调用
getElementById
。这是不可能的:
getElementById
方法只存在于
document
节点上(因为
id
值必须是文档的唯一值)。相比之下,您可以执行
getElementsByTagName
或基于元素的上下文

因此,您可以使用
querySelectorAll
方法来实现这一点,只要您不介意不支持此方法的浏览器,例如IE8

cloned.querySelectorAll('[id="test0"]')[0].id = "new-id";

你到底为什么要把你的问题标记为
jquery
,然后说“No jquery!”……我这么做是为了让更多的javascript用户来查看这个问题。我现在把它拿走了。我没有那样做。。。我知道这可能会奏效,但是,我正在将此对象推入一个documentFragment,然后立即添加所有内容。忘记我所说的,我认为@lonesomeday有你的答案。:-)我读了你的话。。。我的想法是,因为我在一个大的项目列表中循环,将每个项目追加到dom中,然后进行修改比将所有项目放入文档片段中,然后在一个操作中追加要慢。。。跨浏览器支持的内容?@JoelGrannas您可以循环遍历所有子元素并查找ID。或者,您可以使用一个库来为您解决此类问题。jQuery突然出现在我的脑海中……@JoelGrannas:
querySelectorAll
将在几乎所有浏览器上运行,IE7和更早版本除外()。据我所知,
getElementsByTagName
应该可以在所有浏览器上使用。谢谢,我现在就试试这个。。。我不担心IE7,因为我可以把它们推向一个遗产application@JoelGrannas:鲜为人知的事实是,jQuery实际上使用了
querySelectorAll
getElementsBYTagName
:(尽管它通过大量的跨浏览器清理来实现这一点,所以我想您是对的,使用jQuery将是比重新发明特定轮子更好的解决方案)。