Javascript 删除并设置一个元素';s文本
显示如何删除和设置元素的文本: HTMLJavascript 删除并设置一个元素';s文本,javascript,html,Javascript,Html,显示如何删除和设置元素的文本: HTML <div id="test">Hey! <div id="child">delete me</div> </div> 以下是控制台输出: b before: <div id="test">Some new text.</div> removing child: "Hey!" removing child: <div id="child">d
<div id="test">Hey!
<div id="child">delete me</div>
</div>
以下是控制台输出:
b before: <div id="test">Some new text.</div>
removing child: "Hey!"
removing child: <div id="child">delete me</div>
removing child: " "
b's value post remove: <div id="test">Some new text.</div>
text: Some new text.
b之前:一些新的文本。
孩子:“嘿
删除子对象:删除我
删除子项:“
b的价值后移:一些新的文本。
文本:一些新文本。
b
怎么能等于一些新的文本呢。代码>当HTML明确设置为嘿代码>
另外,为什么b的值post remove:
输出显示为一些新文本
,即使它尚未设置
如果您想知道为什么控制台会在您之前登录时向您显示一些内容,那是因为控制台(部分)是DOM中内容的实时显示,而不是一瞬间写出的一堆字符串。更多关于这一点及其答案
基本上,如果您记录一个对象,控制台可能会将其视为活动显示,并在您更改该对象时对其进行更新。如果您记录一个字符串,控制台将正确地将其显示为不变的内容。因此:
var div = document.createElement("div");
console.log("div", div);
div.appendChild(document.createTextNode("foo"));
…可以(根据各种条件)显示div
包含foo
,因为控制台在我们更改它时更新了显示。()
如果您在调试器中单步执行代码,您可以看到控制台显示一个内容,然后在我们更改其内容时对其进行更改。如果您想知道为什么控制台在您之前登录时会显示一些内容,这是因为控制台(部分)是DOM中内容的实时显示,不是一瞬间写出的一堆字符串。更多关于这一点及其答案
基本上,如果您记录一个对象,控制台可能会将其视为活动显示,并在您更改该对象时对其进行更新。如果您记录一个字符串,控制台将正确地将其显示为不变的内容。因此:
var div = document.createElement("div");
console.log("div", div);
div.appendChild(document.createTextNode("foo"));
…可以(根据各种条件)显示div
包含foo
,因为控制台在我们更改它时更新了显示。()
如果您在调试器中单步执行代码,您可以看到控制台显示一件事情,然后在我们更改其内容时对其进行更改。也许需要更多的解释
请记住,标记中的每个项都有某种元素上下文。甚至文本也是一个节点
因此,脚本开头的#test中有三个节点:
嘿李>
删除我
[空白文本节点]
这就是为什么您将输出视为,而语句通过#test的子节点,依次删除每个节点
在Firefox中运行JSFIDLE后,我不确定您为什么会看到您发布的输出:
b's value post remove: <div id="test">Some new text.</div>
b突然有了满足感。。。它从未消失,您没有处理指向该对象的指针,因此当您测试其内容时,它会显示您刚刚添加到其中的新文本节点。也许需要更多的解释
请记住,标记中的每个项都有某种元素上下文。甚至文本也是一个节点
因此,脚本开头的#test中有三个节点:
嘿李>
删除我
[空白文本节点]
这就是为什么您将输出视为,而语句通过#test的子节点,依次删除每个节点
在Firefox中运行JSFIDLE后,我不确定您为什么会看到您发布的输出:
b's value post remove: <div id="test">Some new text.</div>
b突然有了满足感。。。它从未消失,您没有处理指向该对象的指针,因此当您测试其内容时,它会显示您刚刚添加到其中的新文本节点。使用jQuery进行此类工作肯定会让您的生活更轻松。为了不在这个网站上引起疯狂的愤怒,我只推荐它,而不是给出一个答案:祝你好运!删除所有节点,然后用该文本附加一个新的textnode,现在您想知道为什么它有该文本?这是因为您在控制台记录之前添加了该文本。@Allendar:无论您是否使用库来简化您的生活,都无法替代了解实际发生了什么。@T.J.Crowder:遗憾的是,这似乎只是少数人的看法。使用jQuery做这样的工作肯定会让您的生活更轻松。为了不在这个网站上引起疯狂的愤怒,我只推荐它,而不是给出一个答案:祝你好运!删除所有节点,然后用该文本附加一个新的textnode,现在您想知道为什么它有该文本?这是因为您在控制台记录之前添加了该文本。@Allendar:无论您是否使用库来简化您的生活,都无法替代了解实际发生了什么。@T.J.Crowder:遗憾的是,这似乎只是少数视图。但他只是在记录之后才添加带有新文本的节点@格多龙:没错,这是控制台奇怪的半活跃性。@T.J.,我误解的第一点是,当调用console.log时(“b before:,b”)代码>,我应该看看嘿!“由于修改
b`的JavaScript尚未执行。但我看到一些新文本
,这让我感到困惑。@KevinMeredith:是的,对不起,我误解了。我更新了答案,以解决以下问题:控制台在大多数浏览器上都是活动的(不像终端显示器或类似的)。因此,当我们更改对象时,显示会更新。”(取决于各种条件;例如,Chrome使用DOM元素来实现这一点,但不使用包含简单字符串属性的原始JavaScript对象)@KevinMeredith:有时记录数据的序列化可能会有帮助。这有助于处理TJ描述的活跃性。例如,使用b.outerHTML
。但他只是在记录之后才添加一些新文本的节点?!@gdoron:没错,这是控制台奇怪的半活跃性。@T.J,我的第一个误解是在console.log(“b before:,b);
,我应该看到Hey!”,因为修改b`