HTML Javascript通过id标记名获取textNode吗?

Mik*_*e P 4 html javascript textnode

反正有没有为textNode分配一个id,然后通过该id检索该文本节点?我已经尝试了几种不同的方法,并继续得到错误,说不能获得null的属性.

我的代码看起来像这样......

 var myDiv = document.createdElement('div');
 myDiv.id = "textContainer";

 var textNode = document.createdTextNode("some text");
 textNode.id = "descriptionText";
 myDiv.appendChild(textNode);
Run Code Online (Sandbox Code Playgroud)

在这一点上工作得很好; 它显示在页面上.后来我尝试修改那个文本节点,这就是我得到错误的地方.

 var tempNode = document.getElementById(descriptionText);
 descriptionText.value = "new text";
Run Code Online (Sandbox Code Playgroud)

这是不行的.我已尝试变量,如文本节点用tagName,数据等命名,我得到相同的错误.那么,是不是可以命名和检索文本节点?还有下一个创建新文本节点并替换旧文本节点的最佳解决方案?

roc*_*est 9

文本没有id的属性,因此当您将节点写入DOM时,它不再以这种方式访问​​.您在JavaScript(Text对象)中创建的内容不直接与像HTMLElement这样的DOM元素相关联.

事实上,它甚至不被认为是父母的孩子,而是父母的孩子textContent.请注意,textContent它来自一个继承自a的元素Node.

您可以在创建对象时为其指定"id",因为所有对象都只是对象,但是当您将其放入DOM时,所有非标准内容都会消失.

如果你测试你父元素的子元素:

myDiv.children.length;
Run Code Online (Sandbox Code Playgroud)

您将看到(如果没有其他子项)您添加的文本节点作为属性"吸收"到父级中.

这是一个小小的jsfiddle演示.


旁注:这是对浏览器中文本处理方式的过度简化.我不知道如果我把它称为过于简单,但它是一个无论哪种方式.

应该注意的是,Text继承自CharacterData,而CharacterData又继承自Node.但是,这些是接口,它限制了可用方法/属性的范围.

此外,文本节点永远无法通过标识或标签在DOM访问,但.MDN页面Node.normalize清楚地演示了如何通过childNodes只读nodeList提供这些节点.

虽然将这些东西放在后面的口袋中很有用,但在日常使用的节点和规范化以及CharacterData的上下文中考虑Text可能并不重要.