2016-08-18 12 views
1

多くのhtmlファイルを含むウェブサイトを開発しています。最近、別々のヘッダーとフッターのhtmlファイルを使用してJavaScriptを使用して時間を節約しています。この問題を解決するには、ヘッダーとフッターはすべて同じように見えますが、この便利なテクニックを使用する前に、ページに応じてハイライトされたページがありました(これは、手動でページを追加することによって行われました。<a>タグファイル)それは)ですが、今私は具体的なHTMLをターゲットにすることだけを対象とする特定の<a>をターゲットにする方法を見つけることができません。コードは次のようになります。 HTMLのhome.html:javascriptを使用してJavaScriptを使用してCSSクラスを追加する(

<div id="header"></div> 

HTMLのheader.html:

<ul> 
    <li id="LI_56"> 
       <a href="pages/home.html" id="A_57">Home</a> 
    </li> 
    </ul> 

Javascriptが次のようになります。

$(function(){ 
    $("#header").load("header.html"); 
    $("#footer").load("footer.html"); 
}); 

CSSは次のようになります。

.home{ 
background-color:red; 
} 
  <script> 
      $(document).ready(function() { 
      document.getElementById('A_57').className = 'home'; 
      }); 
      </script> 

しかし、私はエラーを取得:と私は何をしようとしたことはある "はTypeError:のdocument.getElementById(...)がnullです"。ヘッダーがすでに私のhome.htmlにあり、javascriptで実装されていない場合、すべて正常に動作しますが、それはオプションではありません。誰もが解決策を知っていることを願っています。各HTMLに異なるCSSファイルを使用することも、明らかにオプションではありません。できるだけストレートでデベロッパーフレンドリー(スマート&怠惰)でなければなりません! :) 前もって感謝します!

+0

はたぶん、あなたは前にJavaScript関数を発射しようとしています1つをロードしますか? –

+0

機能は負荷1の後に起動する必要がありますが、明らかに反対が発生します。私はすでに解決策を持っていますが、私はより効果的なものを望んでいました。 – Mkey

答えて

1

後処理やHTMLの挿入が行われた後、このコールバックが実行されます。

$(function(){ 
    $("#header").load("header.html", function() { 
     document.getElementById('A_57').className = 'home'; 
    }); 
    $("#footer").load("footer.html"); 
}); 
1

これは、要素がまだ存在しないためです。 htmlが読み込まれた後にクラスを追加します。 「完全な」コールバックでクラス名を設定し

$(function(){ 
    $("#header").load("header.html", function() { 
     var $homeLink = $('#header').find('a').filter(function() { 
      return $.trim($(this).text()) === 'Home' 
     }); 

     $homeLink.addClass('home'); 
    }); 
    $("#footer").load("footer.html"); 
}); 
+0

それは動作しますが、私は多くの異なるページを持っているので、htmlページにこのスクリプトを追加するだけで、クラス名を変更する必要がありましたが、別の.jsファイルでこのスクリプトを使用する方法があります私のhtmlページにいくつかの余分な.jsを追加することによって、このjsのクラスを作成することもできます。これは、jsは、自分のhtmlページ名やその他の情報に応じて、どのクラスを設定するかを知ることができます。 – Mkey

+0

'header.html'には常にあなたが上に投稿した構造が含まれていますか?これは非常に最適化されたコードではありませんが、私はこれを助けるために私の答えを更新しました。ヘッダーがロードされた後、テキスト "ホーム"とのアンカーリンクを見つけ、そのアンカーリンクに "ホーム"のクラスを追加します。 – Jamy

関連する問題