2012-06-27 27 views
28

Ogni volta che uso la funzione trim() su una stringa, funziona benissimo con Chrome e Firefox ma ottengo un errore in IE8 dicendo:non funziona in IE8?

oggetto non supporta questa proprietà o metodo

Can qualcuno mi dice perché questo succede e se c'è un lavoro in giro?

+0

http://stackoverflow.com/questions/2308134/trim-in-javascript-not- working-in-ie – ShaggyInjun

+1

È semplice, IE8 non lo supporta: http://kangax.github.com/es5-compat-table/ – elclanrs

+0

questo collegamento è utile per questo bug. [http://stackoverflow.com/questions/2308134/trim-in-javascript-not-working-in-ie][1] [1]: http: // StackOverflow. it/questions/2308134/trim-in-javascript-not-working-in-ie –

risposta

82

IE8 non supporta l'assetto funzione. Ecco un polyfill:

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

Puoi spiegare cosa sta facendo questo frammento di codice ?, soprattutto, di cosa parla questa istruzione if. – dwjohnston

+3

Questo snippet verifica innanzitutto se la funzione di ritaglio è definita (typeof String.prototype.trim! == 'function') Se non è definita, definisce la funzione che è una semplice sostituzione con un'espressione regolare – nemo

+1

http: // stackoverflow.com/a/2308157/1958835 – Igorovics

38

se si desidera è possibile aggiungere jQuery e utilizzare $ .trim (....) questo sarà il lavoro ..

$.trim(" hello "); 

darvi

"hello" 
+2

Grazie per questa risposta, molto preferito per i siti che già utilizzano jQuery. – rcourtna

+0

Grazie Karesh, jQuery.trim() ha funzionato per me in IE. – Muk

+1

Senza offesa, ma penso che questo dovrebbe essere fatto solo quando stiamo già usando javascript. Altri saggi aggiungendo jquery al sito solo per una funzione non hanno un bell'aspetto. La soluzione di cui sopra sembra più elegante. –

2

Internet Explorer è iniziata solo il supporto per trim() dalla versione 9.

Per riferimento, il MDN Polyfill for String.prototype.trim() è:

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, ''); 
    }; 
    })(); 
} 

e la support perché è:

+--------+---------+----+-------+--------+ 
| Chrome | Firefox | IE | Opera | Safari | 
+--------+---------+----+-------+--------+ 
| All | 3.5  | 9 | 10.5 |  5 | 
+--------+---------+----+-------+--------+ 
0

Dal momento, stavo usando jQuery, con l'aiuto di @nemo e @ Karesh-a mi si avvicinò con:

if(typeof String.prototype.trim !== 'function') { 
    String.prototype.trim = function(){ 
     return jQuery.trim(this); 
    } 
} 
Problemi correlati