更新された回答:
リンクをたどると、ページのDOM全体が破棄されて破棄され、新しいページのHTMLを読み取って作成されたDOMに置き換えられます。したがって、古いDOMに加えた変更は保持されません。ページの読み込み時に「btnActive」クラスをリンク上に配置する場合は、それに応じて、、、およびページのHTMLを変更する必要がhome.php
ありapps.php
ますsupport.php
。
例home.php
:
<ul>
<li><a id="home" href="home.php" class="btnActive">Home</a></li>
<li><a id="apps" href="apps.php">Apps</a></li>
<li><a id="support" href="support.php">Support</a></li>
</ul>
...しかしapps.php
:
<ul>
<li><a id="home" href="home.php">Home</a></li>
<li><a id="apps" href="apps.php" class="btnActive">Apps</a></li>
<li><a id="support" href="support.php">Support</a></li>
</ul>
または、ページの読み込み時にJavaScriptを使用して、に基づいてクラスを追加することもできますがlocation.href
、実際にはHTMLを変更することをお勧めします。ただし、完全を期すために、リンクのとページの名前に同じ値を使用するため、次id
のようにすることができます。
$(document).ready(function() {
var id = location.href.replace(/.*\/([\w]+)\.php$/, '$1');
if (id) {
$("#" + id).addClass("btnActive");
}
});
これにより、ページの名前がURLから分離され(ページにつながるパスは無視さ.php
れ、最後のパスが削除されます)、それがとして使用されid
、クラスが追加されます。繰り返しになりますが、お勧めしませんが、引用したURLを使用すれば、機能するはずです。
次の元の答えは、私が気付く前からのものでした(Roryのおかげで)あなたはおそらく本当にリンクをたどる必要があるでしょう。
元の回答:
リンクをたどらないようにブラウザに指示することは決してないため、ページがリロードされます。
return false;
イベントハンドラーを実行することで修正できます。
$(document).ready(function() {
$('#home').click(function (){
$(this).addClass('btnActive');
return false; // <=== The new bit
});
});
...またはevent
引数を受け入れてpreventDefault
それを呼び出す:
$(document).ready(function() {
// Accept the arg ---------v
$('#home').click(function (event){
// call the preventDefault
event.preventDefault();
$(this).addClass('btnActive');
});
});
return false
jQueryイベントハンドラーでは、次の2つのことを行います。
デフォルトのアクションを防止します(この場合、リンクをたどります)。
祖先要素に伝播するイベントを停止します。
preventDefault
最初のものをするだけです。