以下代码根据第一个和子节点的存在设置this.statOffset
:
console.log('Node: ', this.node.childNodes.item(0))
console.log('Node length: ', this.node.childNodes.item(0).length)
this.startOffset = this.node.length - 1 ||
this.node.firstChild.length - 1 ||
this.node.childNodes.item(0).length - 1 ||
this.node.childNodes.item(0).firstChild.length - 1
没关系。但在某些情况下,我会在最后一个值中获得Uncaught TypeError: Cannot read property 'length' of null
:this.node.childNodes.item(0).firstChild.length - 1
奇怪的是,当this.node.childNodes.item(0).length - 1
是有效值时会发生这种情况。 console.logs
输出:
Node: "a"
Node lenght: 1
为什么代码跳过有效值并尝试执行最后一个(这是无效的)?
编辑:节点的结构:
<p>
<strong>a</strong>
b
<span>
<em>c</em>
</span>
d
<strong>e</strong>
</p>
答案 0 :(得分:1)
没关系。但在某些情况下,我得到一个未捕获的TypeError:不能 在最后一个值中读取null的属性'length': this.node.childNodes.item(0).firstChild.length - 1
两件事
childNodes
或children
而不是长度,因为Element没有长度属性假设this
引用发生事件的元素,请尝试
this.startOffset = this.childNodes.length ||
this.childNodes.item(0).childNodes.length;
或使用hasChildNodes
this.startOffset = this.hasChildNodes() ||
this.childNodes.item(0).hasChildNodes();
答案 1 :(得分:0)
你尝试过孩子而不是childNodes吗?这对孩子们来说很有帮助,即使我们在不同的浏览器上尝试这一点,孩子似乎也可以工作,但是childNodes并不适用于所有人。
两者的作用有时不同。我曾在IPad上工作过,而且我已经完成了一些与childNodes合作的工作,而且还没有开展工作。
<html>
<div id="div1">
<div id="div2">
<div id="div3">
<div id="div4">
</div>
</div>
</div>
</div>
<script>
var div1 = document.getElementById("div1");
console.log(div1.childNodes.item(0).firstChild);
console.log(div1.children.item(0).firstChild)
document.getElementById("div4").innerHTML = JSON.stringify(div1.childNodes.item(0).firstChild);
document.getElementById("div4").innerHTML += div1.children.item(0).firstChild;
</script>
<html>