2010-09-01 4 views
2

Ist il une meilleure façon de remplacer/h envelopper le tp: //name.tld/request_url paramètre ou h tps: //name.tld/request_url texte de paramètre dans certains certains éléments HTML avec un <a href>jQuery: replace() ou wrap() http: //nom.tld/request_url? Paramètre avec <a href="this">...</a>?

HTML

<div id="posts"> 
    <div class="post"> 
    Tweet text 1 http://google.com and other text. 
    </div> 
    <div class="post"> 
    Tweet text 2 https://www.google.com and other text. 
    </div> 
    <div class="post"> 
    Tweet text 3 
    </div> 
    <div class="post"> 
    ... 
    </div> 
</div> 

JavaScript

jQuery('#posts .post').each(function() { 
elem = jQuery(this); 
elem.html(
    elem.text() 
    .replace(/(http?:\/\/?\S+)/g, "<a href='$1'>$1</a>") 
); 
}); 

Tous jQuery.wrap() alternative serait bien aussi ...

Répondre

4

Il n'y a pas une meilleure façon, mais vous pouvez simplifier un peu, comme ceci:

jQuery('#posts .post').each(function() { 
    jQuery(this).html(function(i, html) { 
    return html.replace(/(http?:\/\/?\S+)/g, "<a href='$1'>$1</a>"); 
    }); 
}); 

Utilisez cette approche seulement si vous êtes assuré que les messages ne contiennent pas déjà du HTML, sinon utilisez ce que vous avez. JQuery fonctionne avec les nœuds DOM, pas avec le texte à l'intérieur des nœuds, ou plutôt parce que ce n'est que du JavaScript ... mais il ne fournit pas beaucoup de fonctionnalités supplémentaires pour cela. jQuery, y compris .wrap(), se concentre sur la manipulation DOM, pas de texte.

+0

Vous avez raison - wrap() ne fonctionnerait pas en texte brut et text() ne devrait pas être utilisé s'il y avait un autre code HTML dans le nœud. Ma question est juste, s'il y a un moyen de le faire avec moins de code/efford? Le code pourrait être manipulé plus tôt également .. par exemple. côté serveur ou dans la fonction de réponse de succès d'un appel AJAX. Thx pour votre réponse de toute façon ... – gabel

+0

@gabel - Il n'y a pas vraiment une façon moins chère que j'ai jamais vu, sauf si vous le faites côté serveur (que je le ferais) à l'avance. –

Questions connexes