2

range.moveStart が IE で動作するのと同じ方法で range.setStart を使用する方法を知っている人はいますか? 次のようなJSでバックスペース/削除を実装したいと思います:

range.moveStart('文字',-1); range.deleteContents();

しかし Firefox では

4

2 に答える 2

2

Firefox は、IE <= 8 を除くすべての最新のブラウザーと共にDOM Rangesを使用します。moveStartIE のメソッドに直接類似するものはなくTextRange、一般的なケースでは扱いにくいものです。範囲がテキスト ノード内にあり、先頭にない場合は簡単です。それ以外の場合は、ドキュメント内をさかのぼって前のテキスト ノードを見つけ、範囲をそこに移動する必要があります。以下は、単一のテキスト ノード内でのみ機能します。

function backspace() {
    var sel = window.getSelection();

    // If there is a selection rather than a caret, just delete the selection
    if (!sel.isCollapsed) {
        sel.deleteFromDocument();
    } else if (sel.rangeCount) {
        var range = sel.getRangeAt(0);
        if (range.startContainer.nodeType == 3 && range.startOffset > 0) {
            range.setStart(range.startContainer, range.startOffset - 1);
            sel.removeAllRanges();
            sel.addRange(range);
            sel.deleteFromDocument();
        }
    }
}

WebKit と Firefox 4 には、問題を完全に解決するオブジェクトの変更メソッドがあります。Selection

function backspace2() {
    var sel = window.getSelection();

    // If there is a selection rather than a caret, just delete the selection
    if (!sel.isCollapsed) {
        sel.deleteFromDocument();
    } else if (sel.rangeCount && sel.modify) {
        sel.modify("extend", "backward", "character");
        sel.deleteFromDocument();
    }
}
于 2010-09-07T10:54:17.760 に答える