【问题标题】:How can I use jQuery to add a class based on the filename?如何使用 jQuery 添加基于文件名的类?
【发布时间】:2013-05-28 13:33:37
【问题描述】:

我正在设计一个具有相同导航的网站,但我希望在导航中突出显示当前页面。

为此,我尝试使用此 jQuery 代码...

$(document).ready(function() {
 var $filename = window.location.href.substr(window.location.href.lastIndexOf("/") + 1);
 var $element = $('#' + $filename);
 $($element).addClass('active');
 });
});

..在这个 HTML 代码上(我给了每个不同的 id,因为我不确定哪个会起作用)...

<nav class="closed">
 <a id="index" href="#">Home</a>
 <a id="index.php" href="#">About</a>
 <a id="/index.php" href="#">Forum</a>
 <a id="\index.php" href="#">Get involved</a>
</nav>

但是,我似乎无法让这段代码工作。如何根据当前 URL/文件名向具有特定 id 的元素添加类?

【问题讨论】:

    标签: jquery html class navigation nav


    【解决方案1】:

    代替:

    var $element = $('#' + $filename);
    $($element).addClass('active');
    

    使用

    $('#' + $filename).addClass('active');
    

    使用 jQuery 代替 document.ready。 完整代码:

    $(function() {
        var filename = window.location.href.substr(window.location.href.lastIndexOf("/") + 1);
        var element = $('#' + $filename);
        $(element).addClass('active');
    });
    

    甚至更短,但更难调试:

    $(function() {
        $('#' + (window.location.pathname.split('/').pop())).addClass('active');
    });
    

    请记住,如果用户自带,例如 index.php?id=2,您使用的方法可能会出错。明智的做法是使用:

    var filename = (window.location.pathname.split('/').pop()).split('?')[0];
    

    【讨论】:

    • 你仍然需要在选择器中转义特殊字符
    • @Kamil 那么您的替代建议会返回什么价值?它会返回indexindex.php 还是别的什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 2011-08-23
    • 2017-11-19
    • 1970-01-01
    • 2017-01-31
    相关资源
    最近更新 更多