поиск ссылок, которые являются гиперссылками в jQuery - PullRequest
0 голосов
/ 21 апреля 2010

Я пытаюсь взять ссылку либо при нажатии, либо при наведении курсора, чтобы получить атрибут href и сказать, является ли он гиперссылкой или нет. Также я хочу, чтобы он мог сказать мне, если это гиперссылка на мой собственный сайт. Плюс различные другие фильтры.

Основная цель для этого состоит в том, чтобы при нажатии на внутреннюю ссылку ajax сообщал, что нужно захватить контент, генерируется много моих ссылок (через wordpress), поэтому я не могу слишком сильно их изменять. Еще одна цель для этого состоит в том, чтобы я также мог открыть все внешние ссылки в новом окне.

У меня есть решение, которое работает на простой тестовой странице, но когда я помещаю его на рабочую страницу, оно ломается. Я знаю, что, вероятно, все усложняю, чем должно быть.

Вот мой код

$(function(){
   $('a').live('click', function(){
      var x = $(this).attr('href');

      $(this).parent('div').append('<div id="test">' + x +'</div>');
      $('#test:contains("http")').css('color', 'red');
      $('#test:contains("sitename")').css('color', 'black');
      $('#test:contains("admin")').css('color', 'red');
      if($('#test').css('color') == 'red'){

         alert('external link');
         $('#test').remove();
         return true; 

      }else{

         alert('external link');
         $('#test').remove();
         return false;

      }
   });
});

спасибо за помощь

Ответы [ 2 ]

1 голос
/ 21 апреля 2010

Вы также можете использовать синтаксис селектора jQuery (http://api.jquery.com/attribute-starts-with-selector/):

$('a[href^=http://], a[href^=/admin/]').live('click', function(){});
$('a[href^=/sitename/]').live('click', function(){});

Если вы извлечете API селектора, вы найдете еще несколько селекторов (например, заканчиваются на X, содержат X и т. Д.).

1 голос
/ 21 апреля 2010
$('a').live('click', function(){
   var href = $(this).attr('href');

   if(/http:\/\//.test(href) || /admin/.test(href)){
      //alert('external link');
      $(this).attr('target', '_blank');
      return(true);
   }

   if(/sitename/.test(href)){
      //alert('internal link');
      $.ajax({});
      return(false);
   }       
}

это лучший подход, я думаю. Должно работать, но не проверено. Регулярное выражение может / и должно быть точно настроено.

...