Mượn từ các giải pháp của Michael Jasper và Jon Hendershot, tôi đưa ra những điều sau:
$('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);
});
Giải pháp này cung cấp các lợi ích sau so với các giải pháp được cung cấp trước đây:
- Nó sẽ không xóa các thẻ HTML (ví dụ:
<br>
thẻ) bên trong <address>
, vì vậy định dạng được giữ nguyên
- Nó mã hóa đúng URL
- Nó xóa các khoảng trắng thừa để URL được tạo ngắn hơn, sạch hơn và có thể đọc được sau khi mã hóa
- Nó tạo ra đánh dấu hợp lệ (giải pháp của Mr.Henderhot tạo ra
<a><address></address></a>
không hợp lệ vì các yếu tố cấp khối như <address>
không được phép trong các yếu tố nội tuyến như <a>
.
Hãy cẩn thận : Nếu <address>
thẻ của bạn chứa các thành phần cấp khối như <p>
hoặc <div>
, thì mã JavaScript này sẽ tạo ra đánh dấu không hợp lệ (vì <a>
thẻ sẽ chứa các thành phần cấp khối đó). Nhưng nếu bạn chỉ làm những việc như thế này:
<address>
The White House
<br>
1600 Pennsylvania Ave NW
<br>
Washington, D.C. 20500
</address>
Sau đó, nó sẽ hoạt động tốt.