2017-05-31 37 views
0

私はjQueryの初心者です。私は外部ページへのすべてのリンクを発見し、target = "_ blank"属性を追加しようとしています。これまでのところ、私は次のスクリプトを作成しました:動的に追加された要素のターゲットを追加します

​​

これが最初のインスタンスでのページにロードされている要素で正常に動作しますが、新しい要素が追加されたときに動的には、ターゲットを追加するには、再度発生しません。属性。私は "準備"機能を "オン( 'ロード')に変更しようとしましたが、成功しませんでした。

ご協力いただきまして誠にありがとうございました。このような愚かな質問に一瞬でお答えする人々には感謝しています。

編集: AJAX呼び出しでより多くの要素を読み込む無限スクロールスクリプトを作成しました。この要素には「a」タグが含まれており、スクリプトを再度実行したいと思います。

+1

あなたがADDEの要素とはどういう意味ですかダイナミックに?どのようにそれらを追加しますか?ロードおよびレディ機能は、ドキュメントが準備完了またはロードされているときに一度だけ実行されるため、初めてDOMにロードされる要素に対してのみ機能します。どういうわけか、JqueryまたはJSを使って新しいリンクを追加できる場合は、属性の空白をもう一度追加する必要があります。その意味でもっと明示して、私は正しく答えることができると思う。 – DanielPanic

+0

最善の解決策は、*突然変異観測者* https://stackoverflow.com/questions/13277212/mutation-observer-for-creating-new-elements –

答えて

1

私はあなたの機能であなたのリンクを変えるコードをラップでしょうあなたのコンテンツが変わったときにa)onloadとb)を呼び出すことができます。

$(document).ready(function() { 
    linkChanger(); 
}); 

function linkChanger() { 
    $('a').each(function() { 
     if (location.hostname !== this.hostname) { 
      $(this).attr('target', '_blank'); 
     } 
    }); 
} 

後でコンテンツ/リンクを追加した場合、あなたはあなたのページが再び変換/チェックするlinkChanger()を呼び出すことができ、その後:

$('#something').click(function() { 
    // code that gets more content, if async provide a callback that calls linkChanger() 
    linkChanger(); 
}); 
+0

私は "on( 'load')を試みたが、それはそうであるようだ"a"タグのいずれにも影響を与えないため、要素がロードされる前にトリガーされる – Mipod

+0

"on( 'load')"を "ready"に変更し、新しい要素がロードされた後に無限スクロールスクリプトに関数を追加するそれは働いた。ありがとうございました – Mipod

+0

うん、それは '.ready'だったはずです。 – James

1

新しい要素を追加するたびにその関数を起動する必要があります。あなたは新しいリンクがいつ追加されるのかを知るのに最適な人物なので、そのようにスクリプトを設定する必要があります。

function setTargetBlank() { 
    $('a').each(function() { 
    if (location.hostname !== this.hostname) { 
     $(this).attr('target', '_blank'); 
    } 
    }); 
} 

// On load 
$(function() { 
    setTargetBlank(); 
    loadSomeContent(function() { 
    // And after it is loaded, trigger again the function 
    setTargetBlank(); 
    }); 
}); 

あなたはこれらを制御することができない場合、あなたは、単にいつも数秒ごとにその機能をトリガーするタイマーを設定することができます。

// This is not really good for performance, but it will work 
// It will trigger the function every 3 seconds 
setInterval(setTargetBlank, 3 * 1000); 
0

あなたが新しいの前にAリンクをターゲットにしている可能性があります要素が作成されたら、コードをsetTimeout関数で実行してみてください。例えば

$(document).on('load',function() {

setTimeout(function(){ $('a').each(function() { if (location.hostname !== this.hostname) { $(this).attr('target', '_blank');
} }); }, 5000);

});

関連する問題