Javascript 设置子对象的属性<;部门>;在克隆节点内
我已经克隆了一个节点,但我想在克隆的节点内设置或更改div的属性,特别是更改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 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将是比重新发明特定轮子更好的解决方案)。