在IE9中,文本节点==“未知”上的“节点值”属性的类型
Type of "nodeValue" property on text node == "unknown" in IE9
我正在做一个项目,该项目正在做一些DOM树行走。 为了插入一些 span 标签以向文档添加突出显示,有时需要拆分文本节点:
var newTextNode = treeWalker.currentNode.splitText(charOffset);
问题是当我下次尝试调用时:
if (newTextNode.nodeValue == "")
{
//...
}
这个.nodeValue
调用在IE9中产生了一个JavaScript错误,它简单地说,Incorrect function.
至少可以说是完全没有帮助的。 想到也许发生了什么奇怪的事情,我打开调试器并执行:typeof newTextNode.nodeValue
返回"unknown"
。
有人能够解释这种行为吗? 我想也许该功能根本不适用于文本节点,但它在其他场景中工作得很好。 只是在打电话给splitText
之后,它似乎才呕吐。
感谢大家的帮助! 到目前为止,我的谷歌赋还不够。
加法:
查看 newTextNode 对象后,还有更多属性的计算结果为"不正确的函数"
- 数据
- 长度
- 节点值
- 文本内容
- 全文
这是IE 9中的一个错误。
IE 9返回的显然不是文本节点。这是什么我还不太确定。当您调用textNode.splitText(n)
时,n
等于文本节点中文本的长度时,就会发生这种情况。这在IE 7(目前无法测试8)和所有其他主要浏览器中不会发生,并且与DOM 2规范相反,该规范指出splitText()
将此节点在指定的偏移量处分成两个节点,将这两个节点作为同级节点保留在树中。拆分后,此节点将包含偏移点之前的所有内容。将返回相同类型的新节点,其中包含偏移点处和偏移点之后的所有内容。如果原始节点具有父节点,则新节点将作为原始节点的下一个同级节点插入。当偏移量等于此节点的长度时,新节点没有数据。
最简单的解决方案是为此情况添加检查:
if (n < textNode.length) {
newTextNode = textNode.splitText(n);
}
IE8 工作正常,如果将文本节点拆分为其值的长度,则返回一个空节点。IE9 可以正常工作,直到您尝试拆分数据的长度。
我希望IE9(或IE10)会做对,但IE6也有同样的问题 - 它无法在索引处拆分文本节点,只要它的长度。
如果您传递的索引大于文本长度,其他浏览器同样会失败,因此您可以在拆分之前检查节点的 data.length。
如果长度小于或等于要拆分的索引,请将其保留,并在它旁边附加一个新的空节点。
IE9(和其他)返回使用空字符串创建的文本节点的数据或节点值的空字符串。
- 如何保持所选元素's节点的值(而不是引用)
- 如何通过知道节点的值来访问dom&&只要知道价值就可以得到手风琴的索引
- l20n:服务器端节点解析值错误
- Json - 检查子节点空值
- 如何获取XML文件中节点的值.代码无效
- 如何获取在Tree jquery中选择的节点的值
- 获取具有行索引的子节点的值
- 如何使用javascript将每个子节点的值总结为JSON中的父节点
- 从树视图中选定的节点(href值)获取JSON
- cloneNode并将所有节点(父节点+子节点)的值相加.Javascript
- Javascript如何获取父节点的值
- 如何获取xml所有子节点的值
- 从元素中的子节点获取值
- 通过javascript替换aspx页面中节点的值
- 如何在JavaScript中将DOM节点文本值转换为UTF-8
- 为什么不在遍历DOM树时从文本节点获取值呢?
- JS获取生成的文本节点的值
- 从xml节点检索所有子节点的值,然后对每个子节点应用javascript函数
- 使用 jQuery 查找表行中子节点的值
- 如何使用getElementsById获取子节点的值