Firefox, ainsi que tous les navigateurs modernes, sauf IE < = 8 utilise DOM Ranges. Il n'y a aucun analogue direct à la méthode moveStart
de IE TextRange
et c'est difficile à faire dans le cas général. Si la plage est dans un noeud de texte et non au début, c'est facile; sinon, vous devrez revenir en arrière dans le document pour trouver le nœud de texte précédent et y déplacer la plage. Les travaux suivants que dans un nœud texte unique:
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 et Firefox 4 ont le modify method of Selection
objects qui résout complètement le problème:
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();
}
}