Jquery没有选择正确的href

Posted

技术标签:

【中文标题】Jquery没有选择正确的href【英文标题】:Jquery not selecting proper href's 【发布时间】:2012-07-29 18:11:57 【问题描述】:

这个脚本:

$(function() 
    $('a').each(function() 
        var href = $(this).attr('href');
        if ("a:not(http://)") 
            $(this).attr('href', '/' + href);
        
    );
);

为每个链接添加斜线,甚至包含“http://”的链接不知道为什么?我没有收到任何错误?

关于如何解决此问题的任何想法?

【问题讨论】:

你希望if("a:not(http://)")做什么? 你为什么要这样做?这将更新相对链接、SSL 链接、文件链接等... 【参考方案1】:

你把两件事搞混了:

jQuery 选择器:

$(function() 
    $('a:not([href^="http://"])').each(function() 
        var href = $(this).attr('href');
        $(this).attr('href', '/' + href);  
    );
);

和纯javascript if 语句:

$('a').each(function() 
   var href = $(this).attr('href');
   if (href.substr(0, 'http://'.length) == 'http://')
       $(this).attr('href', '/' + href); 
      
);

两者都做同样的事情。

请注意,它们将为 http 以外的其他方案生成无效链接(例如 /https://example.com/index.html)。根据您使用的 HTML 代码的干净程度,您可以简单地查找冒号来识别绝对链接:

$(function() 
    $('a:not([href*=":"])').each(function() 
        var href = $(this).attr('href');
        $(this).attr('href', '/' + href);  
    );
);

【讨论】:

【参考方案2】:

首先,你的代码等于下面的

$(function() 
   $('a').each(function() 
      var href = $(this).attr('href');
      if(true)  $(this).attr('href', '/' + href);    
   );
);

如果你真的想根据条件更新href,if语句应该不同:

$(function() 
   $('a').each(function() 
     var href = $(this).attr('href');
     if(href.indexOf('http://') == -1 )  $(this).attr('href', '/' + href);    
   );
);

另一种方式是@Yogu 提供的方式,在这种方式中,您无需循环访问您不会更新的链接

【讨论】:

【参考方案3】:

只是 Yogu 的一个插件,

请记住,您在每个标签的上下文中。 “在对象本身内部”。 因此,您可以直接访问 href。

$('a').each(function() 
   if (this.href.substr(0, 'http://'.length) == 'http://')
       this.setAttribute('href', '/' + href); 
      
);

【讨论】:

以上是关于Jquery没有选择正确的href的主要内容,如果未能解决你的问题,请参考以下文章

jQuery UI Datepicker 没有正确选择选项

选择的 Jquery 插件 - 获取选定的值

jQuery 选择在没有其 css 的情况下显示

Jquery 更改功能似乎工作,但没有做任何事情

重新打开时 JQuery UI 对话框没有正确调整大小?

如何使用 jQuery 在列表中选择正确的按钮?