2014-04-07 20 views
12

sto eseguendo queste semplici righe di javascript in ultima cioè 11, solo per selezionare tutti i contenuti di un divJavascript: errore 800a025e usando selettore

Ecco uno screenshot da strumento ie11 dev

Code and error - screenshot

Come potete vedere, IE mi altera dicendo: "impossibile completare l'operazione a causa dell'errore 800a025e".

Non sono in grado di capire la natura, la fonte del problema e nessun'altra domanda di overflow dello stack che ho letto mi dà una risposta chiara.

Questo è pieno il codice della mia SelectText jQuery estensione "personale"

jQuery.fn.selectText = function(){ 
    var doc = document; 
    var element = this[0]; 
    // console.log(this, element); 
    if (typeof element == 'undefined') { 
     return; 
    } 
    if (doc.body.createTextRange) { 
     var range = document.body.createTextRange(); 
     range.moveToElementText(element); 
     range.select(); 
    } else if (window.getSelection) { 
     var selection = window.getSelection();   
     var range = document.createRange(); 
     range.selectNodeContents(element); 
     selection.removeAllRanges(); 
     selection.addRange(range); 
    } 
}; 

Elemento in questo caso è un

[Object HTMLTableElement] 

Edit 1: con un po 'di mod:

var range = document.body.createTextRange(); 
var retval = range.moveToElementText(element); 
console.log (retval); 
range.select(); 

Sono in grado di dire che retval non è definito. Questo codice funziona su ff senza problemi, quindi il selettore di elementi va bene. versione jQuery è 1.11

+0

'var retval = intervallo .moveToElementText (elemento);' Che cos'è retval? – epascarello

+0

Sì, ma sto programmando in php/js, su un server linux ... – realtebo

+0

Hai detto che questo problema si verifica in IE 11, che non è supportato su Linux per quanto ne so. –

risposta

7

ho risolto usando questo trucco:

ho avvolto la tabella HTML con un DIV

io uso lo stesso codice, così com'è, senza modifiche, contro il DIV, invece di usando per selezionare solo la tabella.

Sta funzionando.

tavolo Probabilmente HTML non è un testo selezionabile per IE

+2

Ho salvato la mia vita un'altra volta con questa semplice risposta ... – realtebo

1

ho ottenuto questo errore quando si cerca di window.getSelection().removeAllRanges(); e non c'era alcuna selezione. Una soluzione è quella di verificare se v'è una selezione di prima:

if (window.getSelection().getRangeAt(0).getClientRects.length > 0) { 
    window.getSelection().removeAllRanges(); 
} 

Inoltre, questa domanda è un duplicato di Could not complete the operation due to error 800a025e, ma non ho potuto segnare come tale perché l'altra domanda non ha accettato l'risposte.

+0

Questo suggerimento logicamente ha senso, ma non funziona. Il codice di errore restituito non è dovuto alla cancellazione di intervalli indefiniti, che in realtà è gestito correttamente da removeAllRanges(). L'errore è correlato a qualcos'altro relativo alle celle della tabella. – kamelkev

4

Nessuno dei suggerimenti o suggerimenti precedenti risolve correttamente questo particolare problema.

Il problema è causato da elementi non di testo (ad esempio tabella) raccolti insieme ad altri elementi all'interno di una raccolta TextRange. Il tentativo di cancellare la raccolta mentre questi elementi della tabella rimangono all'interno della raccolta causerà incondizionatamente l'errore riportato sopra.

Il problema interessa IE 9/10/11 e vi sono soluzioni alternative specifiche per ciascuno di tali browser. Sfortunatamente tali soluzioni alternative non sono compatibili con altri browser (firefox, safari, chrome, edge), quindi abbiamo bisogno di un caso particolare per la gestione chiara per IE 9/10/11 fornendo al contempo una gestione alternativa per più browser conformi agli standard.Quanto segue sembra funzionare ovunque, almeno a partire da questa scrittura:

 if (doc.body.createTextRange) { // All IE but Edge 
     var range = doc.body.createTextRange(); 
     range.collapse(); 
     range.select(); 
     } 
     else { 
     doc.getSelection().removeAllRanges(); 
     } 

il ramo specifico IE è un modo indiretto di compensazione una gamma contenente elementi di tabella senza effettivamente richiamando il metodo() vuoto che altrimenti risultati nella fastidioso eccezione.

+0

Grazie per questa risposta, proverò tra un paio di giorni – realtebo

Problemi correlati