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

HTML Javascript get textNode by id tagname anything?

有没有办法给textNode分配一个id,然后通过那个id检索那个文本节点?我尝试了几种不同的方法,但不断收到错误提示无法获取 属性 of null。

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

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

 var textNode = document.createdTextNode("some text");
 textNode.id = "descriptionText";
 myDiv.appendChild(textNode);

到目前为止工作正常;它显示在页面上。后来我尝试修改该文本节点,这就是我遇到错误的地方。

 var tempNode = document.getElementById(descriptionText);
 descriptionText.value = "new text";

这是不行的。我已经尝试过使用标签名称、数据等通过文本节点命名的变体,但我遇到了同样的错误。那么,命名和检索文本节点是不可能的吗?下一个最佳解决方案是创建新文本节点并替换旧文本节点吗?

Text doesn't have a property for id, so when you write the node into the DOM, it's not accessible that way any more. What you create in the JavaScript (a Text object) does not directly correlate to a DOM element like HTMLElement.

事实上,它甚至不被认为是父项的子项,它是父项的 textContent。请注意,textContent 来自从 Node.

继承的元素

你可以在创建对象的时候给它分配一个"id",因为所有的对象都只是对象,但是当你把它放入DOM时,所有非标准的东西都消失了。

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

myDiv.children.length;

您会看到(如果没有其他子节点)您添加的文本节点 "absorbed" 作为 属性.

进入父节点

这里有一点 jsfiddle 演示。


旁注:这是对浏览器中文本处理方式的过度简化。我不知道我是否会称其为 粗略 过度简化,但无论哪种方式都是如此。

需要注意的是Text inherits from CharacterData which in turn inherits from Node。但是,这些是接口,限制了可用方法/属性的范围。

此外,文本节点 始终可以在 DOM 中访问,但不能通过标识符或标签访问。 The MDN page for Node.normalize clearly demonstrates how these nodes are available via the childNodes read-only nodeList.

虽然把这些东西放在你的后兜里很有用,但在日常使用的节点和规范化和字符数据的上下文中考虑文本可能并不重要。