2009-11-24 4 views
1

mon code HTML:jQuery: trouver et envelopper textnode avec un élément

<body>Firebrand will tend to burn any bricks out there. so the best idea is to ignore any active firebrand if you are a bricks. Otherwise, you can challenge a firebrand if you have the proper quality to keep up with their latest technology. And don't mess up with firebrand if you are a robber.</body> 

Je veux trouver « incendiaire » à l'intérieur du corps et de le remplacer par <span class="firebrand">firebrand</span> avec jQuery

+0

S'il vous plaît exprimer votre intention plus clairement. Comme vous pouvez le voir dans la réponse de Karim79, la spécification n'est pas assez claire. – Huppie

+0

désolé ma mauvaise, Je veux juste trouver un mot-clé que je désire être enveloppé avec span indépendamment de l'élément parent, il devrait rechercher dans l'ensemble du document. J'ai besoin d'obtenir le noeud de texte et de l'envelopper avec la durée, donc je peux donner un style différent. est là de toute façon je peux le faire sans utiliser $ (selector) .html() ?? – mdennisa

Répondre

4

RECURSE seulement à travers les DOM, en utilisant:

.replace(/(firebrand)/gi, '<span class="firebrand">$1</span>')

sur chaque contenu du texte.

function firebrand($el) { 
    $el.contents().each(function() { 

     if (this.nodeType == 3) { // Text only 
      $(this).replaceWith($(this).text() 
       .replace(/(firebrand)/gi, '<span class="firebrand">$1</span>')); 
     } else { // Child element 
      firebrand($(this)); 
     } 

    }); 
} 

firebrand($("body")); 
+0

Cela m'aider! Je vous remercie! +1 – Thomas

0

Essayez le suivant.

var textApply; 
textApply = function(node){ 
    jQuery.map($(node), function(node) { 
    var value = $(node)[0]; 
    if (value.nodeType == 3 && value.textContent.match(/firebrand/gi)) { 
     var foo = value.textContent.replace(/[\n\r\t ]+/,' ').replace(/firebrand/gi, '<span style="color:red">Firebrand</span>'); 
     var newitem = $(foo); 
     $(node).replaceWith(newitem); 
    } else if (value.nodeName != 'SCRIPT') { 
     jQuery.map($(node).contents(), textApply); 
    } 
    }); 
}; 
textApply($('body')); 
Questions connexes