.trim () en JavaScript ne fonctionne pas en IE
j'ai essayé d'appliquer .trim()
à une chaîne dans un de mes programmes JavaScript. Il fonctionne très bien sous Mozilla, mais une erreur s'affiche quand je l'essaie dans IE8. Personne ne sait ce qui se passe ici? Y a-t-il un moyen de le faire marcher en IE?
code:
var ID = document.getElementByID('rep_id').value.trim();
affichage d'erreur:
Message: Object doesn't support this property or method Line: 604 Char: 2 Code: 0 URI: http://test.localhost/test.js
14 réponses
ajouter le code suivant pour ajouter la fonctionnalité trim à la chaîne.
if(typeof String.prototype.trim !== 'function') {
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g, '');
}
}
on dirait que cette fonction n'est pas implémentée dans IE. Si vous utilisez jQuery, vous pouvez utiliser $.trim()
à la place ( http://api.jquery.com/jQuery.trim / ).
jQuery:
$.trim( $("#mycomment").val() );
Quelqu'un utilise $("#mycomment").val().trim();
mais cela ne fonctionnera pas sur IE.
malheureusement, il n'y a pas de support JavaScript pour trim().
si vous n ' utilisez pas jQuery (qui a un .méthode trim ()) vous pouvez utiliser les méthodes suivantes pour ajouter le support trim aux chaînes:
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
c'est un ajout assez récent à javascript, et il n'est pas supporté par IE.
j'ai eu un problème similaire en essayant de couper une valeur à partir d'une entrée et ensuite demander si elle était égale à rien:
if ($(this).val().trim() == "")
cependant cela a jeté une clé dans les travaux pour IE6 - 8. Assez fâcheusement, j'ai essayé de le var comme ça:
var originalValue = $(this).val();
Cependant, en utilisant la méthode trim de jQuery, fonctionne parfaitement pour moi dans tous les navigateurs..
var originalValueTrimmed = $.trim($(this).val());
if (originalValueTrimmed == "") { ... }
j'ai écrit un code pour implémenter la fonctionnalité trim.
LTRIM (trim gauche):
function ltrim(s)
{
var l=0;
while(l < s.length && s[l] == ' ')
{ l++; }
return s.substring(l, s.length);
}
RTRIM (trim à droite):
function rtrim(s)
{
var r=s.length -1;
while(r > 0 && s[r] == ' ')
{ r-=1; }
return s.substring(0, r+1);
}
TRIM (couper les deux côtés):
function trim(s)
{
return rtrim(ltrim(s));
}
OU
L'expression régulière est également disponible que nous pouvons utiliser.
function trimStr(str) {
return str.replace(/^\s+|\s+$/g, '');
}
nous pouvons obtenir le code officiel sur internet! Reportez-vous ceci:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim
exécuter le code suivant avant tout autre code créera trim() s'il n'est pas nativement disponible.
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, ''); }; })(); }
pour plus: Je viens de découvrir qu'il y a un projet js pour soutenir EcmaScript 5: https://github.com/es-shims/es5-shim en lisant le code source, nous pouvons obtenir plus de connaissances sur la garniture.
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);
Je ne pense pas qu'il y ait une méthode native trim()
dans le standard JavaScript. Peut-être que Mozilla en fournit un, mais si vous en voulez un dans IE, vous aurez besoin de l'écrire vous-même. Il y a quelques versions sur cette page .
j'ai eu le même problème en IE9 Cependant, lorsque j'ai déclaré la version html supportée avec la balise suivante sur la première ligne avant le
<!DOCTYPE html>
<HTML>
<HEAD>...
.
.
le problème est résolu.
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);
}
vient de découvrir QU'IE ne supporte plus trim()
, probablement après une récente mise à jour de windows. Si vous utilisez dojo , vous pouvez utiliser dojo.string.trim()
, il fonctionne plate-forme transversale.
ce problème peut être causé par IE en utilisant le mode de compatibilité sur les sites intranet. Il y a deux façons de résoudre cela, vous pouvez soit mettre à jour IE pour ne pas utiliser le mode de compatibilité sur votre machine locale (dans IE11: Outils-> Paramètres de vue de compatibilité -> Uncheck Display intranet sites en vue de compatibilité)
Mieux encore, vous pouvez mettre à jour les balises meta dans votre page web. Ajouter comme suit:
...
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
</head>
...
Qu'est-ce que cela signifie? Il dit à IE d'utiliser la dernière le mode de compatibilité. De plus amples informations sont disponibles dans MSDN: spécifier les modes de documents
c'est à cause d'une erreur de typographie getElementBy ID . Changer pour getElementById