更新答案:
当你点击一个链接时,页面的整个 DOM 被拆除并丢弃,取而代之的是通过读取新页面的 HTML 创建的 DOM。因此,您对旧 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
在末尾剥离),然后将其用作 anid
并添加类。同样,我不推荐它,但是使用您引用的 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 事件处理程序中做两件事:
阻止默认操作(在这种情况下,按照链接)。
停止传播到祖先元素的事件。
preventDefault
只做第一个。