【问题标题】:How can I add/remove a class to an element when URL contains a specific string? [duplicate]当 URL 包含特定字符串时,如何向元素添加/删除类? [复制]
【发布时间】:2016-05-24 17:09:02
【问题描述】:

我有一些标签:

<!-- Nav tabs -->
  <ul class="nav nav-tabs" role="tablist">
    <li role="presentation" id="hometab" class="active"><a href="http://www.mypage.com/" >Home</a></li>
    <li role="presentation" id="contenttab"><a href="#content" aria-controls="content" role="tab" data-toggle="tab">content</a></li>
  </ul>

  <!-- Tab panes -->
  <div class="tab-content">
    <div role="tabpanel" class="tab-pane active" id="home">home</div>
    <div role="tabpanel" class="tab-pane" id="content">content</div>
  </div>

当我的 URL 包含字符串 ?dir 时,我想向选项卡添加一个类。

例如:如果我的 URL 是 www.mypage.com/?dir=something,那么 #contenttab 应该是活动的。例如,如果 URL 仅为 www.mypage.com,则 #contenttab 不应处于活动状态,但 #hometab 应处于活动状态。

    <script type="text/javascript">
$(document).ready(function() {
    var url = location.pathname;
    if ("url:contains('?dir')") {
        $("#contenttab").attr("class","active");
        $("#hometab").removeClass("active");

    } else {
    $("#contenttab").removeClass("active");
    $("#hometab").attr("class","active");
    }

});        
</script>

我的脚本不工作。 #contenttab 始终处于活动状态,#hometab 从不处于活动状态。

【问题讨论】:

    标签: jquery


    【解决方案1】:

    尝试用这个检查:

    if ( url.indexOf( '?dir' ) !== -1 ) { ... }
    

    或者试试:

    var url = location.search; // or location.href;
    
    if ( url.indexOf( '?dir' ) !== -1 ) { ... }
    

    【讨论】:

    • 我试过了,现在#hometab 一直有效
    • location.pathname的值是多少?
    • 是的,`location.search` 工作了!
    • 猜对了,因为通常location.pathname 只在?dir 之前返回/。
    【解决方案2】:
        var url = location.pathname;
    
        if (url.indexOf('?dir') > -1) {
            $("#contenttab").attr("class", "active");
            $("#hometab").removeClass("active");
    
        } else {
            $("#contenttab").removeClass("active");
            $("#hometab").attr("class", "active");
        }
    

    【讨论】:

    • 谢谢,但现在如果 URL 为 http://www.mypage/?dir=something,则 #hometab 处于活动状态。
    【解决方案3】:

    尝试使用测试:

    <script type="text/javascript">
            $(document).ready(function() {
                if (/\?dir/.test(location.pathname)){
                    $("#contenttab").attr("class","active");
                    $("#hometab").removeClass("active");
                } else {
                    $("#contenttab").removeClass("active");
                    $("#hometab").attr("class","active");
                }
            });        
    </script>
    

    感谢回答How can I get query string values in JavaScript?我认为做你需要的最好和安全的方法是获取查询字符串参数dir。当然,函数 getParameterByName() 将返回对获取任何其他查询字符串参数有用。

    function getParameterByName(name, url) {
        if (!url) url = window.location.href;
        name = name.replace(/[\[\]]/g, "\\$&");
        var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
        results = regex.exec(url);
        if (!results) return null;
        if (!results[2]) return '';
        return decodeURIComponent(results[2].replace(/\+/g, " "));
    }
    
    var dir=getParameterByName('dir');
    
    $(document).ready(function() {
        if (dir==''){
            $("#contenttab").attr("class","active");
            $("#hometab").removeClass("active");
        } else {
            $("#contenttab").removeClass("active");
            $("#hometab").attr("class","active");
        }
    });   
    

    注意:如果一个参数出现多次 (?dir=lorem&dir=ipsum),你会得到第一个值(lorem)。

    【讨论】:

    • 不幸的是,如果 URL 是 http://www.mypage/?dir=something #hometab 是活动的。
    • 这不是你想要的?
    • 知道,我需要#contenttab 才能激活
    猜你喜欢
    • 2021-03-17
    • 2014-11-08
    • 1970-01-01
    • 2021-09-18
    • 2020-08-22
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 2020-02-04
    相关资源
    最近更新 更多