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

时间:2015-04-16 21:50:59

标签: javascript html 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);

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

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

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

1 个答案:

答案 0 :(得分:9)

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

事实上,它甚至不被视为父母的孩子,而是父母的textContent。请注意,textContent来自继承自Node

的元素

您可以指定一个" id"在创建对象时因为所有对象都只是对象,但是当你把它放到DOM中时,所有非标准的东西都会消失。

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

myDiv.children.length;

您会看到(如果没有其他孩子)您添加的文字节点是"吸收"作为财产进入父母。

这里有一点jsfiddle示范。


旁注:这是对浏览器中文本处理方式的过度简化。我不知道我是否称之为粗略过度简化,但它是一种方式。

应该注意Text继承自CharacterDataNode继承自The MDN page for Node.normalize。但是,这些是接口,它限制了可用方法/属性的范围。

此外,文本节点 始终可以在DOM中访问,但不能通过标识符或标记访问。 childNodes通过nodeList只读{{3}}清楚地演示了这些节点的可用性。

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