在jQuery中查找超链接的链接

时间:2010-04-21 06:57:13

标签: jquery attributes filter hyperlink href

我试图在点击或悬停时获取链接能够获取属性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 个答案:

答案 0 :(得分:1)

$('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);
   }       
}

我认为这是一种更好的方法。应该工作,但未经测试。 正则表达式可以/并且应该进行微调。

答案 1 :(得分:1)

您还可以使用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等)。