Pergunta

Esta questão já tem uma resposta aqui:

Alguém sabe de um script que pode selecionar todas as referências de texto a URLs e automaticamente substituí-los com marcas de âncora apontando para esses locais?

For example:

http://www.google.com 

would automatically turn into

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

Nota: Eu estou querendo isso porque eu não quero passar por todo o meu conteúdo e envolvê-los com marcas de âncora.

Foi útil?

Solução

JQuery não vai ajudá-lo a um lote inteiro aqui como você não está realmente preocupado com DOM travessia / manipulação (que não criar a marca de âncora). Se todos os seus URLs estavam em

marcas, em seguida, talvez.

solução

A baunilha JavaScript é provavelmente o que você quer, e como ele teria sorte, esse cara deve ter coberto .

Outras dicas

NOTA: Uma versão atualizada e corrigida desse script já está disponível em https: //github.com/maranomynet/linkify (licença GPL / MIT)


Hmm ... para mim isso parece ser a tarefa perfeita para jQuery.

... algo como isso veio em cima da minha cabeça:

// 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();

Ele tenta transformar todas as ocorrências do seguinte links:

  • www.example.com/path
  • http://www.example.com/path
  • mailto:me@example.com
  • ftp://www.server.com/path
  • ... todo o acima envolto em colchetes (ou seja < ... >)

Enjoy: -)

Eu tenho essa chamada de função i

textToLinks: function(text) {

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

Eu sugiro que você faça isso em suas páginas estáticas antes da renderização para o navegador, ou você vai estar empurrando a carga de cálculo de conversão para seus visitantes pobres. :) Veja como você pode fazê-lo em Ruby (lendo da entrada padrão, escrevendo para stdout):

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

Obviamente, você vai querer pensar sobre como fazer este tão robusto como você deseja. O acima exposto requer que todos os URLs para começar com http, e não irá verificar a converter URLs que estão entre aspas (isto é, que já pode estar dentro de uma ). Ele não vai pegar ftp: //, mailto :. Ele terá todo o prazer converter o material em lugares como

scroll top