2010-07-29 8 views
3

Je voudrais trouver avec jquery du texte spécifique, et le remplacer par une version renouvelée incluant du HTML.Trouver le texte (A) et le remplacer par du texte (B) + HTML

J'ai essayé this, qui travaille quand je l'utilise seul texte:

<script type="text/javascript" > 
    jQuery(document).ready(function(){ 

    jQuery("*").contents().each(function() { 
    if(this.nodeType == 3) 
    this.nodeValue = this.nodeValue.replace("hello mum", "bye bye mum"); 
    }); 

    }) 
</script> 

Cependant, si j'ajoute un texte + HTML pour remplacer l'expression ciblée, il obtient « formaté » et est lu comme texte brut ...

Connaissez-vous les gars une solution à ce problème? Puis-je ajouter du HTML à l'expression de remplacement?

Merci.

Répondre

4

jQuery est un peu problématique lorsqu'il s'agit de nœuds de texte. En outre, puisque vous manipulez directement le contenu d'un nœud de texte, tout le HTML sera considéré comme du texte.

La solution la plus simple que je peux penser est un peu hacky, mais fonctionne très bien :)

Remplacer le nœud de texte avec un élément HTML factice. Remplacez ensuite cet élément HTML fictif par votre HTML de remplacement.

var isTextNode = this.nodeType == 3; 
var matchesText = this.nodeValue.indexOf('hello mum') > -1; 

if(isTextNode && matchesText) { 
    // replace text node with dummy element 
    // so jQuery can be used 
    var dummy = $('<b>'); 
    this.parentNode.replaceChild(dummy[0], this); 

    dummy.replaceWith('my <b>awesome</b> html now <i>works</i>'); 
} 
+0

Ne pas oublier votre '> -1' pour la'. indexOf() 'dans le cas où le texte est à l'index' 0'. : o) EDIT: Aussi 'this.nodeType = 3' devrait être' this.nodeType == 3' – user113716

+0

@patrick - merci :) résolu ces problèmes. – Anurag

0

this.nodeValue = this.nodeValue.replace ("Bonjour maman", "Au revoir maman");

changé à

this.nodeValue = this.nodeValue.replaceWith ("bonjour maman", "

quelques trucs html

");

+0

ce que j'ai essayé, mais la deuxième partie est littéralement sortie, même si elles sont des balises HTML, ils seront lus par le visiteur – Peanuts

Questions connexes