设置范围:startContainer错误

时间:2012-10-16 07:33:13

标签: javascript jquery range

这是我的代码:

var range = editor.selection.getRng();
range.setStart(range.startContainer, 2);

一切都适用于Chrome,但在Firefox中我得到错误索引或大小为负或大于允许的数量。 在Chrome中,range.startContainer是一个文本元素,在Firefox中它是HtmlParagraphElement。

为什么在FF中发生这种情况以及如何将此段落标记转换为文本?

我试过了:

range.setStart(range.startContainer.firstChild, 2);

但它不起作用。

1 个答案:

答案 0 :(得分:1)

Firefox报告的startContainer并没有错,它只是不同。 startContainer理论上可以指代任何类型的节点,并且不同浏览器选择如何表示某些类型的选择存在一些变化。

如果您想在编辑器的文本内容中完成字符偏移方面的所有操作,可以使用this answer之类的内容。如果您只想要针对此特定情况的解决方案,我建议您只需检查startContainer的节点类型。请注意,以下假设<p>元素的第一个子节点是文本节点:

var range = editor.selection.getRng();
var startNode = range.startContainer;
if (startNode.nodeType !== 3) {
    startNode = startNode.firstChild;
}
range.setStart(startNode, 2);