2010-07-22 3 views

risposta

0

implementano entrambi: il codice che supporta FF e il codice supporing IE. È possibile utilizzare Framework per scrivere codice per entrambi i browser. Che il Framework farà il lavoro di dividere le differenze tra i browser.

È triste, ma i browser non sono compatibili al 100%!

20

No, non c'è. IE ha gli oggetti TextRange per fare il lavoro. IE> = 9 e tutto il resto dell'ultimo periodo di tempo ha le proprietà selectionStart e selectionEnd su testo e input di testo. Questo compito particolare, non è male: il seguente sarà eliminare la selezione corrente (se ne esiste uno), inserire il testo al punto di inserimento e riposizionare il cursore immediatamente dopo il testo inserito, in tutti i principali browser:

function insertTextAtCursor(el, text) { 
    var val = el.value, endIndex, range; 
    if (typeof el.selectionStart != "undefined" && typeof el.selectionEnd != "undefined") { 
     endIndex = el.selectionEnd; 
     el.value = val.slice(0, el.selectionStart) + text + val.slice(endIndex); 
     el.selectionStart = el.selectionEnd = endIndex + text.length; 
    } else if (typeof document.selection != "undefined" && typeof document.selection.createRange != "undefined") { 
     el.focus(); 
     range = document.selection.createRange(); 
     range.collapse(false); 
     range.text = text; 
     range.select(); 
    } 
} 
+0

Grazie molto, ho pensato che i browser avrebbero potuto andare avanti negli ultimi anni, ma ovviamente IE sta ancora scegliendo di essere diverso. – richw81

+1

La buona notizia è che IE 9 ha 'selectionStart' e' selectionEnd'. –

+0

Questo ha funzionato alla grande per la mia implementazione in tutti e tre i browser, l'unico problema che avevo era la sostituzione del testo selezionato. Se ho sostituito val.slice (0, endIndex) con val.slice (0, startIndex) ha dato la funzionalità di evidenziare una selezione e di sostituirla con il testo aggiunto. Solo per gli altri che avevano bisogno della stessa funzionalità che ho fatto. – SomeoneRandom