2010-12-15 125 views
5

En essayant de trouver une solution pour rechercher une chaîne de caractères "Tony" contenue dans le DOM et la remplacer par une chaîne de caractères "Tiger".Comment rechercher du texte et le remplacer en utilisant jQuery

Quelqu'un a-t-il des idées ou des idées sur la façon de le faire? Im devinant qu'il faudra une déclaration de chaque couplé avec une fonction de remplacement et contient éventuellement?

Merci Jake

+2

Plus de détails, s'il vous plaît. Avez-vous une idée de _where_ dans le DOM, il pourrait être? Voulez-vous remplacer _every_ occurrence de 'Tony' par' Tiger', peu importe où elle se produit? –

+0

avez-vous le conteneur html pour cela ?? ou son droit remplacer tous – kobe

+0

Oui, je veux remplacer chaque occurrence de "Tony" avec "Tiger" - où jamais dans le DOM il se trouve - doit probablement dans l'élément .container. – jrutter

Répondre

18

Vous pouvez l'utiliser pour rechercher tous les enfants de l'élément de corps et remplacer le texte ...

$('body').children().each(function(){$(this).text($(this).text().replace('Tony','Tiger'))}); 

Il utilise jQuery. Il ne devrait également modifier le contenu textuel des éléments et aucun des mise en forme HTML ...

Vous pouvez également utiliser cette méthode qui utilise une expression rationnelle et obtiendrez tous les éléments imbriqués:

$('body').html($('body').html().replace(/Tony/gi,'tiger')); 
+0

Cela ne fonctionnera pas parce que 'children()' ne recherche pas récursivement dans le DOM - il ne vous donne que les enfants immédiats. –

+0

Cela ne fonctionne pas sur ma page: http://www.laithwaiteswine.com $ ('. Container'). Enfants(). Each (function() {$ (this) .text ($ (this) .text() .réplace ('Laithwaites', 'Tiger'))}); - Il enlève tout le DOM ou le casse. – jrutter

+1

@jrutter: Je ne sais pas pourquoi cela vous arrive sans avoir vu votre code. Cependant, j'ai amélioré ma solution avec une alternative en utilisant une approche RegExp ---> $ ('body'). Html ($ ('body'). Html(). Replace (/ Tony/gi, 'tiger')) – exoboy

5

page large, vous pouvez utiliser quelque chose comme ceci:

var $body = $('body'); 
var html = $body.html(); 
var newHtml = html.replace('Tony', 'Tiger'); 
$body.html(newHtml); 

Ou, si vous avez un conteneur plus spécifique, utilisez jQuery pour sélectionner le conteneur de l'enfant et faire la même chose .

De toute façon, il s'agit d'une sorte de fusil de chasse. Cela modifiera la chaîne dans les attributs de texte visible et d'élément html. Une approche plus détaillée pourrait être nécessaire si la chaîne devait être ignorée à certains endroits.

+0

Cela ne fonctionne pas, la page entière se recharge. – jrutter

3

Est-il possible pour coupler cela avec une solution côté serveur? Vous pouvez envelopper chaque occurrence du côté serveur de mots avec une classe spéciale, comme <span class="replaceme">texttoreplace</span>.

L'exécution d'un remplacement javascript sur les classes résultantes devrait seulement accélérer les choses.

+1

+1 certainement beaucoup mieux que la recherche du DOM pour le texte. –

+1

Si c'était une possibilité, pourquoi ne remplacerait-il pas la chaîne du côté serveur pour commencer? L'ajout d'éléments dom inutiles semble excessif – ximi