2009-12-28 4 views
1

This answer était presque exactement ce dont j'avais besoin.jQuery remplacer toutes les instances d'un char dans un nœud - travailler à un point

Après avoir ajouté que fn, en ligne, en haut de mon code jQ, je l'ai écrit ce JQ plus bas:

$(":contains(|)").each(function() { 
    replaceText('|', 'X'); 
}); 

Cela fonctionne, trouver tous les caractères de tuyaux à travers et les remplacer tout le doc avec X.

Cependant, je voulais remplacer tous les caractères dans un div particulier, pas dans l'ensemble du document. J'ai donc changé pour:

$("#mySpecificDiv:contains(|)").each(function() { 
    replaceText('|', 'X'); 
}); 

Toutefois, cela remplace toutes les instances du doc. Je suis sûr que je devrais utiliser la troisième option 'node' (voir linked-to answer) pour limiter la portée, mais j'ai essayé et échoué à trouver la bonne syntaxe. Désolé, encore une fois, en lisant les livres et les essais et erreurs et expériences passées a continué à contrecarrer mes efforts pour maîtriser un autre exercice jQ stupidement simple et merci d'avance si vous avez le temps de me montrer ce que je fais mal.

Cheers, -Alan

Répondre

0

Utilisez ceci:

$(':contains(|)', $('#mySpecificDiv')).each(function() { 
    replaceText ('|', 'X', this); 
}); 

$() peut accepter deux arguments. Le premier est le sélecteur, et le second peut être un élément auquel vous limitez la recherche (recherche basée sur le sélecteur).

+0

Merci, j'ai utilisé 'ceci' comme partie de ma solution. – Alan

1

essayez ceci:

replaceText('|', 'X', document.getElementById("mySpecificDiv"));  

mais en utilisant la fonction remplacer du texte dans sa forme actuelle, remplacera le premier match seulement. Vous devez le changer en regex pour remplacer toutes les occurrences dans le div.

Utilisez cette option pour remplacer tous les matches dans le texte:

replaceText(/\|/ig, 'X', document.getElementById("mySpecificDiv")); 
+0

Merci, j'ai utilisé la regex comme partie de la solution et l'ai combinée avec 'ceci' de la réponse alt ci-dessous. – Alan

+0

Oui, s'il y a plus d'un élément nécessitant des manipulations, $ .each est une meilleure solution. – TheVillageIdiot

0

Oui. Vous devez spécifier le noeud ou utiliser l'élément body. Changer par:

$("#mySpecificDiv:contains(|)").each(function() { 
    replaceText('|', 'X', this); 
}); 

this est une référence au noeud de courant étant répétées sur la chaque fonction.

+0

Merci, j'ai utilisé votre utilisation de 'ceci' pour une partie de la solution. – Alan

0

Pour limiter la portée à un élément spécifique.

$('*:contains("|")', '#scopeElement') 
+0

Merci pour votre commentaire. – Alan

0

En fin de compte, je pense que la solution ci-dessous, qui fonctionne parfaitement, est un hybride de quelques-unes des réponses (mes excuses si votre réponse est ce que je dois et je viens d'être si stupide que je didn ne réalisez pas ...).

Ce qui suit trouve une div spécifique, puis remplace récursivement chaque instance du caractère de canalisation, trouvée par l'utilisation d'une regex, avec une autre chaîne de texte, 'X' dans ce cas.

$("#mySpecificDiv:contains(|)").each(function() { 
    replaceText(/\|/ig, 'X', this); 
}); 

Brillant, je ne serais pas ici sans vos réponses - beaucoup merci à tous ceux qui ont commenté.

Questions connexes