Tomando prestado de las soluciones de Michael Jasper y Jon Hendershot, ofrezco lo siguiente:
$('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 solución ofrece los siguientes beneficios sobre las soluciones ofrecidas anteriormente:
- No eliminará las etiquetas HTML (por ejemplo,
<br>
etiquetas) dentro <address>
, por lo que se conserva el formato
- Codifica correctamente la URL
- Aplasta los espacios adicionales para que la URL generada sea más corta, limpia y legible después de la codificación.
- Produce un marcado válido (la solución de Mr.Hendershot crea
<a><address></address></a>
que no es válida porque los elementos de nivel de bloque, como por ejemplo <address>
, no están permitidos dentro de elementos en línea como <a>
.
Advertencia : si su <address>
etiqueta contiene elementos de nivel de bloque como <p>
o <div>
, entonces este código JavaScript producirá un marcado no válido (porque la <a>
etiqueta contendrá esos elementos de nivel de bloque). Pero si solo estás haciendo cosas como esta:
<address>
The White House
<br>
1600 Pennsylvania Ave NW
<br>
Washington, D.C. 20500
</address>
Entonces funcionará bien.