2012-07-31 23 views
1

這個腳本:Jquery的不是選擇合適的HREF的

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

斜線添加到每一個環節,即使與包含鏈接的「http://」不知道爲什麼?我沒有得到任何錯誤?

關於如何解決這個問題的任何想法?

+0

你在期待'if(「a:not(http://)」)'做什麼? – MrOBrian 2012-07-31 21:28:49

+1

你爲什麼這樣做?這將更新相關鏈接,SSL鏈接,文件鏈接等... – Sinetheta 2012-07-31 21:33:36

回答

6

你混了兩件事情:

  • 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); 
    }); 
}); 
+0

真棒謝謝你 – BostonBB 2012-07-31 21:44:20

0

首先,你的代碼等於以下

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

如果你真的要根據病情來更新HREF,如果statetment應該是不同的:

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

另一種方式是通過@Yogu,在那裏你簡單的爲你不是印度政府鏈接不循環中的一個提供納克更新

0

只是一個插件來Yogu,

請記住,你在每一個標籤的情況下。 「物體本身內部」。 因此,您可以直接訪問href。

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