40 votes

jQuery Texte de Lien de Script?

Personne ne sait d'un script qui permet de sélectionner l'ensemble du texte des références à des Url et automatiquement remplacer par des balises d'ancrage pointant vers ces endroits?

For example:

http://www.google.com 

would automatically turn into

<a href="http://www.google.com">http://www.google.com</a>

Note: je suis le vouloir parce que je ne veux pas aller à travers tout mon contenu et les envelopper avec des balises d'ancrage.

57voto

Már Örlygsson Points 6861

REMARQUE: Une mise à jour et la version corrigée de ce script est maintenant disponible à http://github.com/maranomynet/linkify (GPL/licence MIT)


Hmm... pour moi, cela semble parfait tâche pour jQuery.

...quelque chose comme ceci est venu sur le dessus de ma tête:

// Define: Linkify plugin
(function($){

  var url1 = /(^|&lt;|\s)(www\..+?\..+?)(\s|&gt;|$)/g,
      url2 = /(^|&lt;|\s)(((https?|ftp):\/\/|mailto:).+?)(\s|&gt;|$)/g,

      linkifyThis = function () {
        var childNodes = this.childNodes,
            i = childNodes.length;
        while(i--)
        {
          var n = childNodes[i];
          if (n.nodeType == 3) {
            var html = $.trim(n.nodeValue);
            if (html)
            {
              html = html.replace(/&/g, '&amp;')
                         .replace(/</g, '&lt;')
                         .replace(/>/g, '&gt;')
                         .replace(url1, '$1<a href="http://$2">$2</a>$3')
                         .replace(url2, '$1<a href="$2">$2</a>$5');
              $(n).after(html).remove();
            }
          }
          else if (n.nodeType == 1  &&  !/^(a|button|textarea)$/i.test(n.tagName)) {
            linkifyThis.call(n);
          }
        }
      };

  $.fn.linkify = function () {
    return this.each(linkifyThis);
  };

})(jQuery);

// Usage example:
jQuery('div.textbody').linkify();

Il tente à son tour tous les occurrances de la suite dans les liens:

  • www.example.com/path
  • http://www.example.com/path
  • mailto:me@example.com
  • ftp://www.server.com/path
  • ...tout cela enveloppé dans des crochets (c - <...>)

Profiter :-)

14voto

Pseudo Masochist Points 1579

JQuery ne va pas vous aider beaucoup ici que vous n'êtes pas vraiment intéressé à DOM traversée/manipulation (autres que la création de la balise d'ancrage). Si toutes vos URLs étaient <p class="url"> balises puis, peut-être.

À la vanille, JavaScript solution est probablement ce que vous voulez, et comme le destin l'aurait, ce gars-là devrait vous avoir couvert.

5voto

Kimtho6 Points 3897

J'ai cette fonction que j'appel

textToLinks: function(text) {

    var re = /(https?:\/\/(([-\w\.]+)+(:\d+)?(\/([\w/_\.]*(\?\S+)?)?)?))/g;
    return text.replace(re, "<a href=\"$1\" title=\"\">$1</a>");
  }

4voto

Pistos Points 8997

Je vous suggère de le faire sur vos pages statiques avant le rendu dans le navigateur, ou vous serez en poussant la charge de la conversion de calcul sur votre pauvre visiteurs. :) Voici comment vous pouvez le faire en Ruby (lecture à partir de stdin, écrit sur la sortie standard stdout):

while line = gets
  puts line.gsub( /(^|[^"'])(http\S+)/, "\\1<a href='\\2'>\\2</a>" )
end

Évidemment, vous aurez envie de penser sur la façon de faire cela aussi robuste que vous le désirez. Le ci-dessus exige que toutes les Url commence par http, et va vérifier de ne pas convertir les Url qui sont entre guillemets (c'est à dire qui est peut-être déjà à l'intérieur d'un <a href="...">). Il ne sera pas attraper ftp://, mailto:. Il sera heureux de convertir des documents dans des endroits comme la balise <script> corps, qui vous ne voulez pas arriver.

La solution la plus satisfaisante est vraiment pour faire la conversion à la main avec votre éditeur de texte de sorte que vous pouvez le globe oculaire et d'approuver tous les substitutions. Un bon éditeur vous permettra de faire des regexp substitution avec un groupe de références (aka dos références), de sorte qu'il ne devrait pas être un gros problème.

2voto

MPorras Points 1360

Jetez un oeil à ce plugin JQuery: https://code.google.com/p/jquery-linkifier/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X