How do I test to see if links are external or internal? Please note:

  1. 我无法硬编码本地域.
  2. 我无法测试"http".我可以很容易地通过http绝对链接链接到我自己的站点.
  3. I want to use jQuery / javascript, not css.

我怀疑答案就在某个地方.href,但我没有找到解决方案.

Thanks!

推荐答案

var comp = new RegExp(location.host);

$('a').each(function(){
   if(comp.test($(this).attr('href'))){
       // a link that contains the current host           
       $(this).addClass('local');
   }
   else{
       // a link that does not contain the current host
       $(this).addClass('external');
   }
});

注意:这只是一个快速的&;肮脏的例子.它将匹配所有href="#anchor"链接


Update 2016-11-17

这个问题仍然有很多流量,很多人都告诉我,这个公认的解决方案会在好几次失败.正如我所说,这是一个非常快速和肮脏的答案,以显示如何解决这个问题的主要方法.更复杂的解决方案是使用<a>(锚定)元素上可访问的属性.正如@Daved在这个答案中已经指出的,关键是将hostname与当前的window.location.hostname进行比较.我更倾向于比较hostname个属性,因为如果port个属性与80个属性不同,它们永远不包括host个属性.

现在我们开始:

$( 'a' ).each(function() {
  if( location.hostname === this.hostname || !this.hostname.length ) {
      $(this).addClass('local');
  } else {
      $(this).addClass('external');
  }
});

State of the art:

Array.from( document.querySelectorAll( 'a' ) ).forEach( a => {
    a.classList.add( location.hostname === a.hostname || !a.hostname.length ? 'local' : 'external' );
});

Jquery相关问答推荐

JQuery AJAX数据表保留前导零

第一次单击后,Ajax addEventListener 停止工作

为什么我不能在 window.onload 事件的处理程序中将 $ jQuery 对象作为参数传递?

Jquery $(this) 子 Select 器

将 jquery 元素转换为 html 元素

在 div 中找到第一次出现的类

模糊事件阻止点击事件工作?

如何将 JavaScript 对象编码为 JSON?

如何使用 jQuery Select 所有复选框?

如何在 jQuery Select 器中定义 css :hover 状态?

jquery清除输入默认值

jQuery $.browser 是否已弃用?

组合数组时无法读取未定义的属性推送

调整浏览器大小时调整jqGrid的大小?

禁用 Android 网页中输入焦点的zoom

将数据传递给 jQuery UI 对话框

如何使用 Javascript/jQuery 确定图像是否已加载?

使用 JQuery 激活 bootstrap 选项卡

jQuery select2 获取 Select 标签的值?

jQuery 将换行符转换为 br (nl2br 等效)