range.moveStart が IE で動作するのと同じ方法で range.setStart を使用する方法を知っている人はいますか? 次のようなJSでバックスペース/削除を実装したいと思います:
range.moveStart('文字',-1); range.deleteContents();
しかし Firefox では
range.moveStart が IE で動作するのと同じ方法で range.setStart を使用する方法を知っている人はいますか? 次のようなJSでバックスペース/削除を実装したいと思います:
range.moveStart('文字',-1); range.deleteContents();
しかし Firefox では
Firefox は、IE <= 8 を除くすべての最新のブラウザーと共にDOM Rangesを使用します。moveStart
IE のメソッドに直接類似するものはなく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();
}
}