在Internet Explorer 9上,在文本节点上调用splitText
不会更新其父级的childNodes
。在Chrome和Firefox上,按预期每https://developer.mozilla.org/En/DOM/Text.splitText。
然而 IE9在文本节点parent(?)
上调用console.dir
时表现正常
示例:
<!DOCTYPE html>
<html lang="en">
<meta charset="utf-8">
<script type="text/javascript" charset="utf-8">
window.onload = function() {
var e = document.querySelector('#test p');
var f = e.childNodes[0].splitText(10);
console.log(e.childNodes.length)
// console.dir(e)
console.log(e.childNodes.length)
}
</script>
<div id="test">
<p>Senectus et netus et malesuada fames ac turpis egestas.</p>
</div>
</html>
IE9输出:
LOG: 1
LOG: 1
Chrome和Firefox都正确输出:
2
2
取消注释console.dir(e)
时,现在IE9输出:
LOG: 1
LOG: [object HTMLParagraphElement] {}
LOG: 2
这是一个错误吗?如果是,除了childNodes
之外,是否还有“刷新”并反映console.dir
的实际状态的解决方法?
更新目前似乎有效的是添加/删除节点,例如:
var t = document.createTextNode("");
e.appendChild(t);
e.removeChild(t);
答案 0 :(得分:1)
您可以使用变通方法而不是splitText()
:
function insertAfter(node, precedingNode) {
var nextNode = precedingNode.nextSibling, parent = precedingNode.parentNode;
if (nextNode) {
parent.insertBefore(node, nextNode);
} else {
parent.appendChild(node);
}
return node;
}
// Note that we cannot use splitText() because it is bugridden in IE 9.
function splitDataNode(node, index) {
var newNode = node.cloneNode(false);
newNode.deleteData(0, index);
node.deleteData(index, node.length - index);
insertAfter(newNode, node);
return newNode;
}