Javascript 删除并设置一个元素';s文本

Javascript 删除并设置一个元素';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

显示如何删除和设置元素的文本:

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">​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`