gpt4 book ai didi

javascript - 为什么应用相同id的getElementById在用innerHTML修改其parent后返回不同的对象?

转载 作者:行者123 更新时间:2023-11-30 10:20:19 24 4
gpt4 key购买 nike

我刚刚注意到 document.getElementById("one_id") 在使用其 innerHTML 属性修改其父级之前和之后返回不同的对象。

我测试过的每一个浏览器都会出现这种情况。这是为什么?这是什么原因?

下面是一个例子,大家可以自己测试看看:

<html>
<head>
<title>Test</title>
<script>
function test()
{
var myDiv = document.createElement("div");
myDiv.id = "myDivID";

var bodyTag = document.getElementsByTagName("body")[0];
bodyTag.appendChild(myDiv);

var myDivIDBeforeAdding = document.getElementById("myDivID");
bodyTag.innerHTML += "something added";
var myDivIDAfterAdding = document.getElementById("myDivID");

if (myDivIDBeforeAdding != myDivIDAfterAdding) //This is always true!
{
bodyTag.innerHTML += "<br />myDivIDBeforeAdding = " + myDivIDBeforeAdding;
bodyTag.innerHTML += "<br />myDivIDAfterAdding = " + myDivIDAfterAdding;
bodyTag.innerHTML += "<br />myDivIDBeforeAdding and myDivIDAfterAdding are different!!!";
}
}
</script>
</head>
<body onLoad="test();">
</body>

提前谢谢你。

干杯,

最佳答案

这是因为浏览器实现 innerHTML 的方式。一个简单的实现将解析传入的值,使用它作为蓝图构建一个新的 DOM 片段,然后删除(从 DOM 分离)bodyTag 的旧子项并附加新片段。这实际上就是MDN says关于主题:

Removes all of element's children, parses the content string and assigns the resulting nodes as children of the element.

在这种情况下,检查“之前”和“之后”DOM 节点会告诉您它们是同卵双胞胎。

关于javascript - 为什么应用相同id的getElementById在用innerHTML修改其parent后返回不同的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21734375/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com