2011-01-21 13 views

risposta

7

molto molto semplice esempio ...

jQuery

var span = $('span'); 
    span.html(function(i,html){ 
     replaceTextWithHTMLLinks(html); 
    }); // jQuery version 1.4.x 


function replaceTextWithHTMLLinks(text) { 
    var exp = /(apple)/ig; 
    return text.replace(exp,"<a class='link' href='http://www.$1.com' target='_blank' >$1</a>"); 
} 

html

<span> 
An apple a day, makes 7 apples a week! 
</span> 

demo

+1

che andrà a sostituire il codice HTML di tutte le campate sulla pagina. Usa invece 'each' sugli span per evitare quello. – Reid

+0

prima di tutto, come sarebbe 'each()' a risolvere il tuo problema ?. secondo, non è questo il punto qui e solo un esempio. Potrei anche dire '$ ('body');'. L'OP non ne ha parlato. :) – Reigel

+2

Se si utilizza 'each' per scorrere tutte le span e sostituire singolarmente il codice HTML (anche se probabilmente si vorrebbe testare la presenza della parola chiave prima di farlo), allora non sostituirà tutte le span nella pagina con lo stesso contenuto ... – Reid

5

Ecco un semplice plugin per jQuery che dovrebbe fare il trucco. Selezionerà solo i nodi di testo in modo che se si ha un elemento con una classe apple o id apple non verrà sostituito. Inoltre, se si dispone di un collegamento <a href="#">apple</a> non otterrà sostituito (potrebbe essere un po 'più del necessario, ma ho pensato di postare comunque):

(function($) { 
    $.fn.replacetext = function(target, replacement) { 
     // Get all text nodes: 
     var $textNodes = this 
       .find("*") 
       .andSelf() 
       .contents() 
       .filter(function() { 
        return this.nodeType === 3 && 
         !$(this).parent("a").length; 
       }); 

     // Iterate through the text nodes, replacing the content 
     // with the link: 
     $textNodes.each(function(index, element) { 
      var contents = $(element).text(); 
      contents = contents.replace(target, replacement); 
      $(element).replaceWith(contents); 
     }); 
    }; 
})(jQuery); 

Usage:

$("body").replacetext(/apple/gi, "<a href='http://www.$&.com'>$&</a>"); 

Esempio di lavoro: http://jsfiddle.net/andrewwhitaker/VmHjJ/

Si noti che questo potrebbe diventare inefficiente piuttosto rapidamente a causa dell'uso del selettore $("*"). Se possibile, dovresti sostituirlo con qualcosa di più specifico (o rimuovere completamente la porzione .find("*").andSelf() e passare al plugin un selettore più specifico).

+0

No, sembra perfetto! Lo proverò tra un pò –

+0

@Black Magic Tropical: ha funzionato per te? –

+0

Qui funziona molto bene, ad eccezione dei selettori che contengono alcuni iframe: _permission negata per accedere alla proprietà "document" _. – Anse

Problemi correlati