0
votes

Jquery / javascript: nouvelle boucle REGEXP ()

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

        }
    }

}


8 commentaires

Avez-vous essayé jQuery foreach? . chacun (Traductions, fonction (touche, valeur) {// Votre code});


Essayé votre extrait et travaille pour moi. En outre, je ne pense pas si (traductions.hasownProperty (clé)) 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 () au lieu de QuerySelectoralAlla . Il peut s'agir d'une erreur de syntaxe


En ce qui concerne la regex, vous devez échapper au modèle littéral .


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

3 Réponses :


1
votes

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


0 commentaires


0
votes

Problèmes
  • ne cible pas code> ou code> balises ou fenêtre ou document - cible un élément imbriqué dans le Code> Comme M. Aggarwal's Réponse et le commentaire de IARCADIA suggère. P> li>

  • Les commentaires de l'IARCADIA soulignent également qu'il existe un code superflu: traductions.hasownProperty (clé) code> p> li>

  • 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> igator code>) p> li>

    • correspondant à des balises HTML correspondant (ex. String de recherche: Classe Strong> Correspondances: EM>

      Classe strong> = "...> code>) p> li> ul> li> ul>

      solution h3>

      Je viens d'écrire un plug-in rapide JQuery appelé .Translateword () strong>: p>

      STRUT> UTILISATION: FORT > $ (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>

      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> xxx pré>

      puis passe à travers un objet REGEXP () ( REGEX EM>) qui recherchent et remplace avec la valeur Dictionary em> correspondant à la touche Dictionary em>. p>

      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>


0 commentaires