更新答:
當你點擊一個鏈接時,頁面的整個DOM被拆除和丟棄,並創造了DOM更換通過閱讀新頁面的HTML。所以您對舊DOM的更改不會持久。如果您希望在加載頁面時將「btnActive」類放在鏈接上,則需要相應地修改home.php
,apps.php
和support.php
頁的HTML。
例如,爲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,它應該工作。
下面的原始答案是從我意識到之前(感謝羅裏),你可能確實需要遵循鏈接。
原來的答案:
因爲你從來沒有告訴瀏覽器不跟隨鏈接,這樣的頁面重新加載得到。
您可以通過做return false;
了事件處理程序的修復:
$(document).ready(function() {
$('#home').click(function(){
$(this).addClass('btnActive');
return false; // <=== The new bit
});
});
...或者接受event
參數,就可以調用preventDefault
:在一個jQuery
$(document).ready(function() {
// Accept the arg ---------v
$('#home').click(function (event){
// call the preventDefault
event.preventDefault();
$(this).addClass('btnActive');
});
});
return false
事件處理程序做兩件事:
防止默認操作(在這種情況下,在鏈接之後)。
停止傳播到祖先元素的事件。
preventDefault
只是做了第一個。
哪裏是你的HTML嗎? – Sam
做一個jsfiddle,請 –