Firefox, наряду со всеми современными браузерами, кроме IE <= 8, использует <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html" rel="nofollow noreferrer"> DOM Ranges . Прямого аналога moveStart
метода IE TextRange
в IE нет, и в общем случае это сложно сделать. Если диапазон находится внутри текстового узла, а не в начале, это легко; в противном случае вам придется идти назад в документе, чтобы найти предыдущий текстовый узел и переместить диапазон в него. Следующее работает только в пределах одного текстового узла:
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();
}
}