problème avec JQuery html () dans le traitement Opera
-
13-09-2019 - |
Question
Je suit le code JS (dépouillé à la taille minimale où le problème persiste)
<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
</head>
<body>
<div id="debug">this is <em>test</em></div>
<script type="text/javascript">
var string1 = $('#debug').html();
var string2 = string1.replace(/<em>/g, '<strong>');
string2 = string2.replace(/<\/em>/g, '</strong>');
$('#debug').html( string2 );
</script>
</body>
</html>
Dans Firefox tout fonctionne et balises sont remplacés par .
Mais dans Opera 's sont rester en place. En outre, toutes les autres balises HTML ne sont pas pris par regexps du tout.
Yat-il un moyen de résoudre ce problème? J'ai besoin non seulement pour remplacer les étiquettes, mais pour analyser leur contenu trop (attributs href par exemple).
La solution
Opera retourne balises en majuscules, par exemple <EM>
. Vous devez changer vos expressions régulières pour travailler indépendamment de la casse:
var string2 = string1.replace(/<em>/gi, '<strong>');
string2 = string2.replace(/<\/em>/gi, '</strong>');
Autres conseils
Ne pas utiliser les méthodes de chaînes lorsque vous pouvez utiliser des méthodes DOM:
$("#debug em").each(function() {
var newElem = document.createElement("strong");
for (int i=0; i<this.childNodes.length; ++i) {
newElem.appendChild(this.childNodes[i]);
}
this.parentNode.replaceNode(newElem, this);
});
Vos expressions régulières ne sont pas correspondantes dans Opera comme il a normalisé toutes les balises HTML en majuscules essayer avec // gi
Toutefois, si vous faites plus de changements ( « analyse de leur contenu »), je recommande vraiment faire la manipulation correcte des DOM et ne pas utiliser des expressions régulières.