.trim () in JavaScript non funziona in IE

Ho provato ad applicare .trim() a una stringa in uno dei miei programmi JavaScript. Funziona bene con Mozilla, ma viene visualizzato un errore quando provo in IE8. Qualcuno sa cosa sta succedendo qui? C’è comunque posso farlo funzionare in IE?

codice:

 var ID = document.getElementByID('rep_id').value.trim(); 

visualizzazione dell’errore:

  Messaggio: Object non supporta questa proprietà o questo metodo
 Linea: 604
 Char: 2
 Codice: 0
 URI: http: //test.localhost/test.js 

Aggiungere il seguente codice per aggiungere funzionalità di assetto alla stringa.

 if(typeof String.prototype.trim !== 'function') { String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ''); } } 

Sembra che questa funzione non sia implementata in IE. Se si utilizza jQuery, è ansible utilizzare $.trim() invece ( http://api.jquery.com/jQuery.trim/ ).

jQuery:

 $.trim( $("#mycomment").val() ); 

Qualcuno usa $("#mycomment").val().trim(); ma questo non funzionerà su IE.

Sfortunatamente non esiste il supporto JavaScript cross-browser per trim ().

Se non si utilizza jQuery (che ha un metodo .trim ()) è ansible utilizzare i seguenti metodi per aggiungere il supporto dell’assetto alle stringhe:

 String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g,""); } String.prototype.ltrim = function() { return this.replace(/^\s+/,""); } String.prototype.rtrim = function() { return this.replace(/\s+$/,""); } 

https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Objects/String/Trim

Questa è un’aggiunta abbastanza recente a javascript e non è supportata da IE.

Ho avuto un problema simile quando provavo a tagliare un valore da un input e poi chiedevo se era uguale a niente:

 if ($(this).val().trim() == "") 

Comunque questo ha gettato una chiave in mano per IE6 – 8. Abbastanza fastidiosamente ho provato a varirlo in questo modo:

  var originalValue = $(this).val(); 

Tuttavia, l’utilizzo del metodo trim di jQuery, funziona perfettamente per me in tutti i browser.

 var originalValueTrimmed = $.trim($(this).val()); if (originalValueTrimmed == "") { ... } 

Ho scritto del codice per implementare la funzionalità di ritaglio.

LTRIM (assetto a sinistra):

 function ltrim(s) { var l=0; while(l < s.length && s[l] == ' ') { l++; } return s.substring(l, s.length); } 

RTRIM (assetto a destra):

 function rtrim(s) { var r=s.length -1; while(r > 0 && s[r] == ' ') { r-=1; } return s.substring(0, r+1); } 

TRIM (tagliare entrambi i lati):

 function trim(s) { return rtrim(ltrim(s)); } 

O

È disponibile anche un'espressione regolare che possiamo usare.

 function trimStr(str) { return str.replace(/^\s+|\s+$/g, ''); } 

Spiegazione utile

Possiamo ottenere il codice ufficiale da internet! Riferiscilo:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim

Eseguendo il seguente codice prima che qualsiasi altro codice crei il trim () se non è nativamente disponibile.

 if (!String.prototype.trim) { (function() { // Make sure we trim BOM and NBSP var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; String.prototype.trim = function() { return this.replace(rtrim, ''); }; })(); } 

per altro: ho appena trovato il progetto js per supportare EcmaScript 5: https://github.com/es-shims/es5-shim leggendo il codice sorgente, possiamo ottenere maggiori informazioni su trim.

 defineProperties(StringPrototype, { // http://blog.stevenlevithan.com/archives/faster-trim-javascript // http://perfectionkills.com/whitespace-deviations/ trim: function trim() { if (typeof this === 'undefined' || this === null) { throw new TypeError("can't convert " + this + ' to object'); } return String(this).replace(trimBeginRegexp, '').replace(trimEndRegexp, ''); } }, hasTrimWhitespaceBug); 

Non penso che ci sia un metodo trim() nativo nello standard JavaScript. Forse Mozilla ne fornisce uno, ma se ne vuoi uno in IE, dovrai scriverlo da solo. Ci sono alcune versioni in questa pagina .

Ho avuto lo stesso problema in IE9 Tuttavia, quando ho dichiarato la versione html supportata con il seguente tag sulla prima riga prima del

   ... . . 

Il problema è stato risolto.

 var res = function(str){ var ob; var oe; for(var i = 0; i < str.length; i++){ if(str.charAt(i) != " " && ob == undefined){ob = i;} if(str.charAt(i) != " "){oe = i;} } return str.substring(ob,oe+1); } 

Ho appena scoperto che IE smette di supportare trim() , probabilmente dopo un recente aggiornamento di Windows. Se usi dojo, puoi usare dojo.string.trim() , funziona su più piattaforms.

Questo problema può essere causato da IE utilizzando la modalità di compatibilità sui siti intranet. Esistono due modi per risolvere questo problema, è ansible aggiornare IE per non utilizzare la modalità compatibilità sul computer locale (in IE11: Strumenti-> Impostazioni visualizzazione compatibilità -> Deselezionare Visualizza siti intranet in Visualizzazione Compatibilità)

Meglio ancora, puoi aggiornare i meta tag nella tua pagina web. Aggiungere:

 ...    ... 

Cosa significa questo? Sta dicendo a IE di usare l’ultima modalità di compatibilità. Ulteriori informazioni sono disponibili in MSDN: Specifica delle modalità documento legacy

Questo a causa di errore di battitura errore getElementBy ID . Cambialo in getElementById