Tomando emprestado as soluções de Michael Jasper e Jon Hendershot, ofereço o seguinte:
$('address').each(function() {
var text = $(this).text();
var q = $.trim(text).replace(/\r?\n/, ',').replace(/\s+/g, ' ');
var link = '<a href="http://maps.google.com/maps?q=' + encodeURIComponent(q) + '" target="_blank"></a>';
return $(this).wrapInner(link);
});
Esta solução oferece os seguintes benefícios sobre as soluções oferecidas anteriormente:
- Ele não removerá tags HTML (por exemplo,
<br>
tags) <address>
, portanto, a formatação é preservada
- Codifica corretamente o URL
- Ele comprime espaços extras para que o URL gerado seja mais curto, limpo e legível por humanos após a codificação
- Produz uma marcação válida (a solução do Sr.Hendershot cria
<a><address></address></a>
que é inválida porque elementos no nível do bloco, como <address>
não são permitidos em elementos inline, como <a>
.
Advertência : se sua <address>
tag contiver elementos em nível de bloco como <p>
or <div>
, esse código JavaScript produzirá uma marcação inválida (porque a <a>
tag conterá esses elementos em nível de bloco). Mas se você está apenas fazendo coisas assim:
<address>
The White House
<br>
1600 Pennsylvania Ave NW
<br>
Washington, D.C. 20500
</address>
Então vai funcionar muito bem.