Maison >interface Web >js tutoriel >Solution pour ie 7/8 ne prenant pas en charge les compétences trim attribues_javascript
Dans les navigateurs IE 7 et 8, si vous utilisez l'attribut trim() pour supprimer des espaces, une erreur sera signalée.
Il existe donc les solutions suivantes pour résoudre ce problème :
var aa = $("#id").val().trim() --- La méthode trim() ne peut pas être analysée dans IE
Solution :
[ var aa = $.trim($("#id").val()); Ce n'est pas facile à utiliser, utilisez donc celui présenté ci-dessous. Le premier a été testé.
Les têtes des gens du W3C ont été frappées par des ânes. Ce n'est qu'avec javascript1.8.1 que la fonction trim (avec trimLeft, trimRight) a été prise en charge. Malheureusement, seul Firefox3.5 la prend en charge désormais. Étant donné que la suppression des espaces des deux côtés d’une chaîne est si courante, on la trouve dans toutes les principales bibliothèques. De plus, les étrangers sont très énergiques dans la recherche et ont créé de nombreuses implémentations.
Réalisez 1 OK . (Écrivez ceci en js, puis suivez .trim() directement après la chaîne dans laquelle vous souhaitez supprimer les espaces)
Cela n'a pas l'air très bien. Il utilise deux remplacements réguliers. La vitesse réelle est incroyable, principalement en raison de l'optimisation interne du navigateur. Un exemple célèbre est l'épissage de chaînes. L'ajout direct est plus rapide que StringBuffer constitué de Array. La bibliothèque de classes base2 utilise cette implémentation.
Mise en œuvre 2
est très similaire à l'implémentation 1, mais légèrement plus lente, principalement parce qu'elle suppose d'abord qu'il y a au moins un caractère d'espacement. Prototype.js utilise cette implémentation, mais son nom est strip, car les méthodes de Prototype s'efforcent d'avoir le même nom que Ruby.
Atteindre 3
Obtenez la partie vierge par interception (bien sûr, les espaces sont autorisés au milieu), et un total de 4 méthodes natives sont appelées. La valeur par défaut est très intelligente, la sous-chaîne prend deux nombres comme paramètres. Math.max prend deux nombres comme paramètres et la recherche renvoie un nombre. La vitesse est un peu plus lente que les deux ci-dessus, mais plus rapide que la plupart de celles ci-dessous.
Atteindre 4
Cela peut être appelé une version simplifiée de l'implémentation 2, qui utilise des opérateurs candidats pour connecter deux expressions régulières. Mais cela manquerait l’opportunité d’optimisation du navigateur, qui est inférieure à l’implémentation 3. Parce qu'il a l'air très élégant, de nombreuses bibliothèques l'utilisent, comme JQuery et mootools
Atteindre 5
Atteindre 6
Atteindre 7
Elle est très similaire à l'implémentation 6, mais utilise un regroupement sans capture pour en tirer parti, et l'efficacité des performances est légèrement améliorée.
Atteindre 8
Amélioré selon les deux idées ci-dessus, en utilisant des groupes et des jeux de caractères non capturants, et en utilisant à la place de *. L'effet est incroyable. Surtout dans IE6, cette amélioration des performances peut être qualifiée de folle, tuant directement Firefox.
Mise en œuvre 9
Cette fois, la correspondance paresseuse est utilisée pour remplacer les groupes non capturants, ce qui a été amélioré dans Firefox, IE n'est pas aussi fou que la dernière fois.
Atteindre 10
Je veux juste dire que la personne qui a créé cela n'est plus décrite comme une vache, mais est déjà au niveau d'un dieu. Il répertorie d'abord tous les caractères d'espacement possibles, coupe l'espace de début lors du premier parcours et coupe l'espace suivant lors de la deuxième passe. L'ensemble du processus utilise uniquement indexOf et substring, qui sont des méthodes natives spécifiquement conçues pour le traitement des chaînes, et aucune règle régulière n'est utilisée. La vitesse est étonnamment rapide et devrait être aussi proche de celle de l'implémentation binaire interne, et offrira des performances exceptionnelles dans IE et Firefox (et d'autres navigateurs, bien sûr). La vitesse est de zéro milliseconde.
Atteindre 11
L'implémentation 10 nous a dit que la méthode ordinaire d'interception de chaînes inconnues est bien meilleure que le remplacement régulier, même si elle est un peu plus compliquée. Mais tant que l'expression régulière n'est pas trop compliquée, nous pouvons utiliser l'optimisation de l'expression régulière par le navigateur pour améliorer l'efficacité de l'exécution du programme et atteindre 8 performances dans IE. Je pense que généralement personne n'utilisera l'implémentation 10 dans ses projets, car l'implémentation des espaces est trop longue et difficile à retenir (bien sûr, si vous construisez une bibliothèque de classes, c'est certainement la première). L'implémentation 11 peut être considérée comme une version améliorée. L'espace blanc dans la partie avant est coupé par remplacement régulier, et cette dernière partie est traitée par des méthodes natives. L'effet n'est pas inférieur à la version originale, mais la vitesse est très. incroyable.
Atteindre 12
实现10与实现11在写法上更好的改进版,注意说的不是性能速度,而是易记与施用上。和它的两个先辈都是零毫秒级另外,以后就用这个来工作与吓人。
下面是老外给出的比力结果,执行背景是对Magna Carta 这文章(超过27,600字符)进行trim操作。
实现 Firefox 2 IE 6
trim1 15ms trim2 31ms trim3 46ms 31ms
trim4 47ms 46ms
trim5 156ms 1656ms
trim6 172ms 2406ms
trim7 172ms 1640ms
trim8 281ms trim9 125ms 78ms
trim10 trim11 trim12 trim函数实现揭晓自己的想法,想懂得原作者说什么请看原文。