1

このスクリプト:

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

「http://」が含まれているリンクであっても、すべてのリンクにスラッシュを追加します。理由がわかりませんか?エラーは発生しませんか?

これを修正する方法について何かアイデアはありますか?

4

3 に答える 3

6

あなたは2つのことを混同しました:

  • jQueryセレクター:

    $(function() {
        $('a:not([href^="http://"])').each(function() {
            var href = $(this).attr('href');
            $(this).attr('href', '/' + href);  
        });
    });
    
  • および純粋なjavascriptifステートメント:

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

どちらも同じことをします。

http(eg)以外のスキームに対して無効なリンクを生成することに注意してください/https://example.com/index.html。使用しているHTMLコードがどれだけクリーンかによって、絶対リンクを識別するためにコロンを探すだけで済みます。

$(function() {
    $('a:not([href*=":"])').each(function() {
        var href = $(this).attr('href');
        $(this).attr('href', '/' + href);  
    });
});
于 2012-07-31T21:28:12.840 に答える
0

まず、あなたのコードは次のようになります

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

条件に基づいてhrefを本当に更新したい場合、ステートメントが異なる必要がある場合:

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

もう1つの方法は、@ Yoguが提供する方法です。この方法では、更新しないリンクをループしないでください。

于 2012-07-31T21:31:07.223 に答える
0

Yoguへの単なるアドオン、

各タグのコンテキストであなたを覚えておいてください。「オブジェクト自体の内部」。したがって、hrefに直接アクセスできます。

$('a').each(function() {
   if (this.href.substr(0, 'http://'.length) == 'http://'){
       this.setAttribute('href', '/' + href); 
   }   
});
于 2012-07-31T21:41:33.687 に答える