Je fais une fonction de traduction, et je souhaite ajouter facilement des traductions à l'intérieur d'un objet, puis modifier chaque globalement à l'intérieur du $ ("corps"). HTML () code>, problème est, quand J'utilise nouvelle regexp () code> à l'intérieur de ma boucle, il coupe la boucle après la première itération. if (window.location.href.indexOf("sv") > -1) {
//CUSTOM TRANSLATIONS
var translations = {
'All': 'alla',
'Filter Members': 'Filtrera medlemar',
}
for (var key in translations) {
if (translations.hasOwnProperty(key)) {
console.log(key + " -> " + translations[key]);
$body = jQuery("body");
replaceThis = new RegExp(key, "g");
alert(replaceThis);
$body.html($body.html().replace(replaceThis, translations[key]));
}
}
}
3 Réponses :
Comme vous utilisez une matrice bidimensionnelle, vous devez lier 2 paramètres à votre fonction, une pour la clé et une pour la valeur. Cet exemple devrait fonctionner.
jQuery.each( translations, function( key, value ) {
console.log(key + " -> " + translations[key]);
$body = jQuery("body");
replaceThis = new RegExp(key, "g");
alert(replaceThis);
$body.html($body.html().replace(replaceThis, translations[key]));
});
Il semble que vous ayez un script à l'intérieur de votre balise de corps et que votre script fonctionne dans une erreur. Essayez d'ajouter un élément de conteneur HTML sur tout le HTML, puis effectuez l'opération sur cet élément de conteneur au lieu du corps.
p>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="container"> <div>All</div> <div>Filter Members</div> <div>All</div> <div>Filter Members</div> </div>
Y a-t-il un bon pour m'assurer que seuls le texte à l'intérieur des balises HTML et rien d'autre (comme l'URL d'URL) ne sera remplacé?
@CARLPAPWORTHORTH - Vous pouvez améliorer votre regex à la cater uniquement sur des balises à l'intérieur. Pour référence - Stackoverflow.com/Questtions/6041241 / ...
ne cible pas Les commentaires de l'IARCADIA soulignent également qu'il existe un code superflu: Une chaîne de recherche passée à travers un objet REGEXP devrait être évanouie comme M. Stribiå¼ew a souligné dans des commentaires. Sans échapper à une chaîne donnée, les résultats indésirables s'ensuivent tels que: P>
Substrings correspondants (ex. String de recherche: Tous forts> correspondances: em> Tous strud> correspondant à des balises HTML correspondant (ex. String de recherche: Classe Strong> Correspondances: EM> Je viens d'écrire un plug-in rapide JQuery appelé .Translateword () strong>: p> STRUT> UTILISATION: FORT > Il convertit un tableau donné de matrices ( matrice em>) sur une carte ES6 ( Dictionnaire em>). Chaque clé ( mot-clé em>) est échappée ( échappement em>): p> puis passe à travers un objet REGEXP () ( REGEX EM>) qui recherchent et remplace avec la valeur Dictionary em> correspondant à la touche Dictionary em>. p> p>
code> ou traductions.hasownProperty (clé) code> p>
li>
igator code>) p>
li>
solution h3>
$ (sélecteur) .Translateword (matrice) code>
param: strong>
Sélecteur Code> {String}: Syntaxe Sélecteur CSS / JQuery
Matrix Code> {Array}: Deux dimensions de paires de touches / de valeur p> <main>
<article>
<h1>HEISENBERG IPSUM</h1>
<section>
<h2>I</h2>
<p>What? What do you want?! No. Don't even tell me you're hungry. Don't go there. Hahaha! Are you mad doggin' them, Tio? What, you don't like them? One ding. That means yes. Tio don't like you. Why don't you like them, Tio? You don't trust them? Why
don't you trust them, Tio? BULLSHIT! MY TIO DOES NOT LIE!</p>
</section>
<section>
<h2>II</h2>
<p>You... are trouble. I'm sorry the kid here doesn't see it, but I sure as hell do. You are a time bomb. Tick, tick, ticking. And I have no intention of being around for the boom. Well... you know how they say, it's been a pleasure? It hasn't.</p>
</section>
<section>
<h2>III</h2>
<p>Walter, I'm your lawyer. Anything you say to me is totally privileged. I'm not in the shakedown racket. I'm a lawyer. Even drug dealers need lawyers, right? Especially drug dealers.</p>
</section>
<section>
<h2>IV</h2>
<p>My partner was about to get himself shot. I intervened. He was angry because those two dealers of yours had just murdered an eleven year-old boy. Then again, maybe he thought it was you who gave the order. </p>
</section>
</article>
</main>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Avez-vous essayé jQuery foreach?
. chacun (Traductions, fonction (touche, valeur) {// Votre code}); code>Essayé votre extrait et travaille pour moi. En outre, je ne pense pas
si (traductions.hasownProperty (clé)) code> est utile.Essayé et j'ai le même problème. Je vois une erreur maintenant qui dit: "VM3774: 13 non capturé TypeError: Document.QuerySelectoralAlla n'est pas une fonction"
@Carlpapworth c'est une autre erreur (pas dans le code que vous avez fourni). Essayez d'utiliser
QuerySelectorall () Code> au lieu deQuerySelectoralAlla code>. Il peut s'agir d'une erreur de syntaxeEn ce qui concerne la regex, vous devez échapper au modèle littéral a >.
J'ai essayé et changez l'ordre de l'intérieur du tableau, puis cela a fonctionné ... aurait-il pu être un personnage caché bizarre à l'intérieur du tableau?
Vous obtenez cette erreur car elle traduira également