.trim () em JavaScript não está funcionando no IE

Eu tentei aplicar .trim() a uma string em um dos meus programas JavaScript. Está funcionando bem com o Mozilla, mas um erro é exibido quando eu o tento no IE8. Alguém sabe o que está acontecendo aqui? Existe alguma maneira que eu possa fazê-lo funcionar no IE?

código:

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

exibição de erro:

  Mensagem: O object não suporta esta propriedade ou método
 Linha: 604
 Char: 2
 Código: 0
 URI: http: //test.localhost/test.js 

Adicione o seguinte código para adicionar a funcionalidade trim à string.

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

Parece que essa function não está implementada no IE. Se você estiver usando o jQuery, você pode usar $.trim() ( http://api.jquery.com/jQuery.trim/ ).

jQuery:

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

Alguém usa $("#mycomment").val().trim(); mas isso não funcionará no IE.

Infelizmente, não há suporte cruzado de JavaScript do navegador para trim ().

Se você não estiver usando o jQuery (que possui um método .trim ()), poderá usar os seguintes methods para adicionar suporte ao ajuste às strings:

 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

Esta é uma adição recente ao javascript e não é suportada pelo IE.

Eu tive um problema semelhante ao tentar cortar um valor de uma input e, em seguida, perguntar se era igual a nada:

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

No entanto, isso jogou uma chave nos trabalhos para o IE6 – 8. De forma irritante, tentei variá-lo da seguinte forma:

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

No entanto, usando o método trim do jQuery, funciona perfeitamente para mim em todos os navegadores.

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

Eu escrevi algum código para implementar a funcionalidade de compensação.

LTRIM (trim à esquerda):

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

RTRIM (aparar à direita):

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

TRIM (aparar ambos os lados):

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

OU

Expressão regular também está disponível, o que podemos usar.

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

Explicação Útil

Nós podemos obter o código oficial da internet! Referir isto:

https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/String/trim

Executando o seguinte código antes de qualquer outro código criará trim () se não estiver nativamente disponível.

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

para mais: Acabei de encontrar há js projeto para apoiar EcmaScript 5: https://github.com/es-shims/es5-shim lendo o código-fonte, podemos obter mais conhecimento sobre 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); 

Eu não acho que há um método nativo trim() no padrão JavaScript. Talvez o Mozilla forneça um, mas se você quiser um no IE, você precisará escrever você mesmo. Existem algumas versões nesta página .

Eu tive o mesmo problema no IE9 No entanto, quando eu declarei a versão html com suporte com a seguinte tag na primeira linha antes do

 < !DOCTYPE html>  ... . . 

O problema foi resolvido.

 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); } 

Acabei de descobrir que o IE pára de suportar trim() , provavelmente após uma atualização recente do Windows. Se você usa dojo, você pode usar o dojo.string.trim() , ele funciona de plataforma cruzada.

Esse problema pode ser causado pelo IE usando o modo de compatibilidade em sites de intranet. Existem duas maneiras de resolver isso, você pode atualizar o IE para não usar o modo de compatibilidade em sua máquina local (no IE11: Ferramentas-> Configurações da Visualização de Compatibilidade -> Desmarque Exibir sites de intranet na Visualização de Compatibilidade)

Melhor ainda, você pode atualizar as meta tags na sua página da web. Adicionar em:

 ...    ... 

O que isto significa? Está dizendo ao IE para usar o modo de compatibilidade mais recente. Mais informações estão disponíveis no MSDN: Especificando modos de documento herdados

Isso é devido a erro de erro de digitação getElementBy ID . Altere para getElementById