Javascript History.js从列表项中删除活动类

Javascript History.js从列表项中删除活动类,javascript,history.js,Javascript,History.js,这就是我要做的。假设在我的AJAX应用程序中,我单击了一个链接,该链接添加了一个名为active的类,这个单击还会触发History.js上的statechange 我需要帮助了解的是如何用我的当前状态保存当前活动链接,因此当我单击“后退”或“前进”按钮时,它会根据特定URL的状态从链接中删除或添加活动类。我再次查看了该问题,并认为找到了更好的方法。在将活动类添加到单击事件的列表项之前 $(".products ul li a").on("click", function(e) { $th

这就是我要做的。假设在我的AJAX应用程序中,我单击了一个链接,该链接添加了一个名为active的类,这个单击还会触发History.js上的statechange


我需要帮助了解的是如何用我的当前状态保存当前活动链接,因此当我单击“后退”或“前进”按钮时,它会根据特定URL的状态从链接中删除或添加活动类。

我再次查看了该问题,并认为找到了更好的方法。在将活动类添加到单击事件的列表项之前

$(".products ul li a").on("click", function(e) {

  $this.closest("li").toggleClass("active");
}
但是现在我认为一个更好的方法是在History statechange事件发生时将活动类添加到我的列表项中。这将允许我首先检索GET url参数,然后根据这些值查找数据值属性与url值匹配的列表项

下面是我认为找到正确匹配元素所需的步骤的分解

  • 在History.js statechange事件上调用activate_items()方法
  • 查找是否有任何名为“product_cats”或“color”的url参数,如果有,它们是否有任何值
  • 获取列表项的jquery集合
  • 检查集合中的每个列表项是否都有一个名为“value”的数据属性,该属性与URL参数值之一匹配
  • 如果存在匹配项,则将活动类添加到列表项中
  • 如果不存在匹配项,则删除活动类
  • 下面是我的url参数的一个示例。我有两个参数,都有多个值。 localhost/mytheme/?product\u cats=17,60&color=13,14

    History.Adapter.bind(window,'statechange',function(e){ 
       activate_items();
    }
    
    // GET PARAMETER
    function get_parameter( name ){
    
        name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
        var regexS = "[\\?&]"+name+"=([^&#]*)";
        var regex = new RegExp( regexS );
        var state = History.getState();
        var current_url = state.cleanUrl;
        var results = regex.exec( current_url );
    
        if( results == null )
            return "";
        else {
            return results[1];
        }   
    }
    
    // ACTIVATE ITEMS
    function activate_items( url ){
    
        var items;
    
        // Categories
        var cats = get_parameter("product_cats");
        var colors = get_parameter("color");
        if (cats.length > 0) {
            items = jQuery(".product ul li a");
    
            // Check each <li> for a match. If its data-value attribute matches 
            // one of the values from cats than add an active class to the <li>
        };
        if (colors.length > 0) {
            items = jQuery(".product ul li a");
    
            // Check each <li> for a match. If its data-value attribute matches 
            // one of the values from colors than add an active class to the <li>
        };
    }
    
    History.Adapter.bind(窗口,'statechange',函数(e){
    激活_项();
    }
    //获取参数
    函数get_参数(名称){
    名称=名称。替换(/[\[]/,“\\\[”)。替换(/[\]]/,“\\\]”);
    var regexS=“[\\?&]”+name+“=([^&\\]*)”;
    var regex=新的RegExp(regexS);
    var state=History.getState();
    var current_url=state.cleanUrl;
    var results=regex.exec(当前url);
    如果(结果==null)
    返回“”;
    否则{
    返回结果[1];
    }   
    }
    //激活项目
    函数激活\u项(url){
    风险值项目;
    //类别
    var cats=获取参数(“产品”cats);
    var colors=get_参数(“颜色”);
    如果(猫的长度>0){
    项目=jQuery(“产品ul li a”);
    //检查每个
  • 是否匹配。如果其数据值属性匹配 //cats中的一个值,然后将活动类添加到
  • }; 如果(colors.length>0){ 项目=jQuery(“产品ul li a”); //检查每个
  • 是否匹配。如果其数据值属性匹配 //“颜色”中的一个值,然后将活动类添加到
  • }; }
  • 您可以在代码中看到,我还没有弄清楚如何进行匹配

    重申一下,我正在做所有这一切,因此当你点击浏览器上的后退、前进或刷新按钮时,列表项将根据URL参数具有正确的活动状态。我对任何方向都持开放态度,即使是解决此问题的完全不同的方法