2017-01-19 19 views
0

replaceWithを使用して複数のページに共通のナビゲーションバーを追加しています。replaceWithで追加された要素にJqueryの効果がありません

replaceWith()の後に、li要素の1つに「アクティブ」クラスを追加してリンクをアクティブに見せたいと思います。

コードは実行時に影響しません。しかし、後でChromeスニペットで$( "#link1")。addClass( "active")を実行すると、期待通りに機能します。

<body> 
<div id='nav-placeholder'></div> 

<script> 
     $.get("static/html/navbar.html", function(data){ 
      $("#nav-placeholder").replaceWith(data); 
     }); 
     //There is an <li> element in navbar.html with id="link1" 
     $("#link1").addClass("active"); 
</script> 
</body> 
+0

試し '$(ドキュメント).ready(関数(){...あなたのコードを... }); ' –

+0

いいえ、効果はありません。 addClass()の前と後にconsole.log()を追加し、両方が表示されたがリンクには何の影響も与えなかった。 –

+0

'$ .get()'は**非同期**操作です。コールバック内のコードは、HTTP要求が完了すると実行されます。 '$ .get()'の直後のコードは、そのコールバックが呼び出される前に直ちに実行されます。 – Pointy

答えて

1

<div id='nav-placeholder'></div> 

<script> 
     $.get("static/html/navbar.html", function(data){ 
      $("#nav-placeholder").replaceWith(data); 
      $("#link1").addClass("active"); 
     });   
</script> 

+0

ありがとう、これは@Pointyがコメントで提案した解決策です –

0

このようなchaining the jQuery methods試してみてください:

<body> 
<div id='nav-placeholder'></div> 

<script> 
     $.get("static/html/navbar.html", function(data){ 
      $("#nav-placeholder").replaceWith(data).find("#link1").addClass("active"); 
     }); 
</script> 
</body> 
+0

連鎖を使用したリンクにはまだ効果がありません –

+0

これは、対象となる要素(nav-placeholder)が置き換えられるため、問題が発生します。 – Pointy

関連する問題