Вы можете применить простое свойство из топологии.
Во-первых, убедитесь, что ваша граница разделяет вселенную (все доступные точки, с которыми вы имеете дело). Возможно, вам придется продлить границу через океан, чтобы закончить это.
Теперь, выберите любую контрольную точку, которая помечена как для региона - чтобы определить «Север» и «Юг», у вас должна быть хотя бы одна такая точка. w.l.o.g. предположим, что это «южная» точка, называемая Z
.
Теперь, для каждой точки A
, которую вы хотите классифицировать, нарисуйте непрерывный путь (прямой обычно проще, но не обязателен) от A
до Z
. Найти пересечения этого пути с границей. Если у вас четное количество пересечений, то A
относится к тому же классу («юг»), что и Z
; с другой стороны, это в другом классе («Север»).
Обратите внимание, что для этого требуется топологическое свойство «разбиения» - касательных к граничной линии нет: если ваш путь касается границы, он должен полностью пересечь.
/* here are two different ways to do this */
//using jquery:
$(document).ready(function(){
$('#link_other a').attr('target', '_blank');
});
// not using jquery
window.onload = function(){
var anchors = document.getElementById('link_other').getElementsByTagName('a');
for (var i=0; i<anchors.length; i++){
anchors[i].setAttribute('target', '_blank');
}
}
// jquery is prettier. :-)
Вы также можете добавить тег заголовка, чтобы уведомить пользователя, что вы делаете это, чтобы предупредить его, потому что, как было указано , это не то, чего ожидают пользователи:
$('#link_other a').attr('target', '_blank').attr('title','This link will open in a new window.');
Non-jquery:
// Very old browsers
// var linkList = document.getElementById('link_other').getElementsByTagName('a');
// New browsers (IE8+)
var linkList = document.querySelectorAll('#link_other a');
for(var i in linkList){
linkList[i].setAttribute('target', '_blank');
}
Использование jQuery:
$('#link_other a').each(function(){
$(this).attr('target', '_BLANK');
});
Имейте в виду, что веб-разработчики и эксперты по юзабилити в целом считают это плохой практикой. У Джейкоба Нильсона есть что сказать об удалении контроля над работой пользователей:
Избегайте порождения нескольких окон браузера, если это вообще возможно - отмена кнопки «Назад» у пользователей может сделать их опыт настолько болезненным, что обычно намного перевешивает любую выгоду вы пытаетесь предоставить. Одна из распространенных теорий в пользу появления второго окна заключается в том, что оно не дает пользователям покинуть ваш сайт, но по иронии судьбы оно может иметь только противоположный эффект, не давая им вернуться, когда они этого захотят.
Я считаю, что это обоснование для Атрибут target удаляется W3C из спецификации XHTML 1.1.
Если вы решительно настроены использовать этот подход, решение Pim Jager хорошо.
Более приятной и удобной для пользователя идеей будет добавление графического изображения ко всем вашим внешним ссылкам, указывающее пользователю, что переход по ссылке приведет к их извлечению.
Вы можете сделать это с помощью jquery:
$('a[href^="http://"]').each(function() {
$('<img width="10px" height="10px" src="/images/skin/external.png" alt="External Link" />').appendTo(this)
});
Встроенный:
$('#link_other').find('a').attr('target','_blank');