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