1

これが私のコードです:

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

Chromeではすべて正常に動作しますが、Firefoxでエラーが発生します。インデックスまたはサイズが負であるか、許容量を超えています。Chromeでは、range.startContainerはテキスト要素であり、FirefoxではHtmlParagraphElementです。

FFでこれが発生するのはなぜですか。また、この段落タグをテキストに変換する方法を教えてください。

私は試した:

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

しかし、それは機能しません。

4

1 に答える 1

2

Firefoxによって報告されたstartContainerものは間違っていません、それはただ違うだけです。startContainer理論的にはあらゆる種類のノードを参照でき、さまざまなブラウザが特定の種類の選択を表すために選択する方法にはいくつかのバリエーションがあります。

エディターのテキストコンテンツ内の文字オフセットに関してすべてを実行したい場合は、この回答のようなものを使用できます。この特定のケースの解決策が必要な場合は、startContainerのノードタイプを確認することをお勧めします。<p>以下では、要素の最初の子がテキストノードであると想定していることに注意してください。

var range = editor.selection.getRng();
var startNode = range.startContainer;
if (startNode.nodeType !== 3) {
    startNode = startNode.firstChild;
}
range.setStart(startNode, 2);
于 2012-10-16T08:39:04.917 に答える