Заимствуя решения Майкла Джаспера и Джона Хендершота, я предлагаю следующее:
$('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);
});
Это решение предлагает следующие преимущества по сравнению с ранее предложенными решениями:
- Он не удаляет HTML-теги (например,
<br>
теги) в пределах <address>
, поэтому форматирование сохраняется
- Правильно кодирует URL
- Он сдавливает лишние пробелы, чтобы сгенерированный URL был короче, чище и удобочитаемее после кодирования
- Создает допустимую разметку (решение Mr.Hendershot создает
<a><address></address></a>
, что недопустимо, поскольку элементы уровня блока, такие как <address>
, не допускаются внутри встроенных элементов, таких как <a>
.
Caveat : если ваш тег <address>
содержит элементы уровня блока, такие как <p>
или <div>
, этот код JavaScript будет отображаться с недопустимой разметкой (поскольку тег <a>
будет содержать те элементы уровня блока). Но если вы просто делаете что-то вроде этого:
<address>
The White House
<br>
1600 Pennsylvania Ave NW
<br>
Washington, D.C. 20500
</address>
Тогда все будет работать нормально.