2010-02-27 6 views
15

J'ai reçu de l'aide d'autres personnes pour trouver et remplacer du texte avec jquery.jQuery - Rechercher et remplacer du texte, après que le corps a été chargé

Le code ci-dessous se trouve le mot: « Objet: » et le remplacer par « Nom: »

$("*").each(function() { 
    if ($(this).children().length == 0) { 
     $(this).text($(this).text().replace('Subject:','Name:')); 
    } 
}); 

Et cela fonctionne à merveille.

La seule chose que je rencontre est de remplacer le texte qui est chargé après le chargement de la page.

J'ai certaines fonctions javascript qui affichent des données du serveur, mais seulement après que la page ait chargé tous les éléments. Par exemple, un utilisateur sélectionne une valeur dans une liste déroulante qui initie un événement pour charger une liste de produits à partir de la base de données.

je formate certains de ces produits comme celui-ci:

pommes Granny Smith Prix: x.xx par livre faits nutritionnels ....

Je veux seulement trouver un remplacer le mot " Prix: ", et éventuellement le remplacer par" Coût: ".

Mais comme je l'ai mentionné, ces données n'ont pas encore été chargées. Et seulement affiche après que l'utilisateur sélectionne "pommes Granny Smith" dans le menu déroulant.

Est-ce une limite avec laquelle je dois vivre?

Répondre

13

Vous pouvez essayer de fixer un événement au ajaxStop event ainsi que de la charge:

function replaceText() { 
    var jthis = $(this); 
    $("*").each(function() { 
     if(jthis.children().length==0) { 
      jthis.text(jthis.text().replace('Subject:', 'Name:')); 
     } 
    }); 
} 
$(document).ready(replaceText); 
$("html").ajaxStop(replaceText); 
+0

Ça marche! Bonne idée, et pourtant si simple. Merci! – coffeemonitor

+2

Pourquoi créer autant d'objets jq .... cache $ (this) à la place – redsquare

+0

Où puis-je ajouter cet extrait? functions.php, mon fichier de thème? Désolé pour la question noobie. – Pete

1

Appelez votre fonction à partir du rappel $(document).ready() comme celui-ci

$(document).ready(function() { replace_stuff(); }); 
+0

Je le fais déjà, et n'affecte toujours pas les données chargées après le chargement de la page. – coffeemonitor

0

La fonction ci-dessous fonctionne parfaitement pour moi:

function replaceText(selector, text, newText, flags) { 
    var matcher = new RegExp(text, flags); 
    $(selector).each(function() { 
    var $this = $(this); 
    if (!$this.children().length) 
     $this.text($this.text().replace(matcher, newText)); 
    }); 
} 

Voici un exemple d'utilisation:

function replaceAllText() { 
    replaceText('*', 'Subject:', 'Name:', 'igm'); 
} 

$(document).ready(replaceAllText); 
$('html').ajaxStop(replaceAllText); 
Questions connexes