jQuery texto ao Link Script? [duplicado]
-
05-07-2019 - |
Pergunta
Esta questão já tem uma resposta aqui:
- Como substituir URLs simples com links? 24 respostas
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.
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çãoA 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 = /(^|<|\s)(www\..+?\..+?)(\s|>|$)/g,
url2 = /(^|<|\s)(((https?|ftp):\/\/|mailto:).+?)(\s|>|$)/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, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.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