2010-11-11 5 views
0

Mon but est d'associer une info-bulle (contenant une définition) à certains mots du côté client en utilisant JS.
Le texte est généré avec Django/Python (à partir d'un magasin de données GAE).
Pour ce faire, j'ai besoin de scanner un bloc de texte pour plusieurs mots clés qui nécessitent des définitions et de créer dynamiquement un «titre» html pour l'info-bulle.JavaScript, Django et Google App Engine - Remplacer le texte

Je l'ai fait avec succès pour un mot clé à la fois, cependant, je semble être incapable de faire une recherche et de remplacer plusieurs valeurs dans le même bloc de texte (quand j'essaye d'accomplir avec un django forloop, la chaîne originale entière apparaît une fois pour chaque commande de remplacement - voir ci-dessous).

Mon code:

var str="<p>Paragraph of text containing key words such as test1 and test2! </p>"; 
    {% for i in thing %} 
    document.write(str.replace(/{{i.word}}/gi, "<strong><a title='{{i.tooltip}}'> {{i.word}}</a></strong>")); 
    {% endfor %} 

Il en résulte:

« paragraphe de texte contenant des mots clés tels que keyword1 et keyword2
paragraphe de texte contenant des mots clés tels que keyword1 et keyword2! "

Ma sortie désirée est: "Le paragraphe du texte contenant des mots clés tels que keyword1 et keyword2"

Toute aide serait grandement appréciée, j'ai une connaissance très limitée en JS.

Répondre

1

La meilleure façon de le faire serait de construire simplement la chaîne dans la Django pour la boucle, en remplaçant sur chaque fois, alors que la sortie à la fin:

{% for i in thing %} 
str = str.replace(/{{i.word}}/gi, "<strong><a title='{{i.tooltip}}'> {{i.word}}</a></strong>")); 
{% endfor %} 
document.write(str); 
+0

Merci pour votre réponse. Cela m'a permis de faire quelques progrès. Le texte ne se répète plus à chaque fois, cependant, seule une info-bulle apparaît pour le dernier mot. Aucun des autres ne le fait. C'est parce que vous remplacez la définition de chaîne à chaque fois. J'ai essayé de l'ajouter, cependant, il duplique à nouveau. < –

+0

Non, le code est correct - vous voulez remplacer la définition de 'str' à chaque fois. Jetez un oeil à la source de la page pour voir le javascript généré, et peut-être mettre des instructions d'alerte (ou mieux, 'console.debug()' si vous avez installé Firebug) pour voir comment 'str' est construit. –