【问题标题】:Get numerical value at end of class name and store as variable using jQuery在类名末尾获取数值并使用 jQuery 存储为变量
【发布时间】:2011-07-17 09:17:27
【问题描述】:

考虑一下这个由 WordPress 函数输出的菜单:

<ul id="header-cats"> 

    <li class="cat-item cat-item-6"><a href="url" title="View all posts filed under Category I">Category I</a> 
</li> 
    <li class="cat-item cat-item-7"><a href="url" title="View all posts filed under Category II">Category II</a> 
</li> 
    <li class="cat-item cat-item-8"><a href="url" title="View all posts filed under Category III">Category III</a> 
</li> 

</ul> 

现在考虑这个帖子列表:

<ul id="posts-preview" class="clearfix"> 

    <li class="filter-reset filter-hide filter-6 ">             
        <a class="post-thumb" id="post-112" href="url" >Link</a>        
    </li>

    <li class="filter-reset filter-hide filter-6 filter-8 ">            
        <a class="post-thumb" id="post-102" href="url" >Link</a>        
    </li>

    <li class="filter-reset filter-hide filter-7 ">             
        <a class="post-thumb" id="post-88" href="url" >Link</a>         
    </li>

    <li class="filter-reset filter-hide filter-6 ">             
        <a class="post-thumb" id="post-6" href="url" >Link</a>      
    </li>
</ul>

我的目标是使用 jQuery 函数来提取菜单类名的数字结尾(即cat-item 6 中的6)并使用该值来定位相应的帖子。为了详细说明,我将使用 6 作为变量并找到以 6 结尾的 filter 类。

这是我目前所拥有的:

  $('#header-cats li').click(function(){  

    var num_id = $(this).attr('class') // ... matching "cat-item-?" etc...

        $(".filter-"+num_id).fadeIn(500); 

        return false;

  });

对于 js 恶魔来说应该很容易 :-)

【问题讨论】:

    标签: jquery class numerical


    【解决方案1】:

    您可以使用正则表达式从您的班级 ID 中获取数字(下面的代码未经测试)-

    $('#header-cats li').click(function(){  
        var num_id = $(this).attr('class').match(/\d+/); // ... matching "cat-item-?" etc...
        $(".filter-"+num_id).fadeIn(500); 
        return false;
    });
    

    【讨论】:

    • 哇,stack-o 一定要快 :-)
    【解决方案2】:

    如果你确定类字符串中只有 1 个数字,你可以使用这个:

    var num_id = $(this).attr('class').match(/\d+/)[0]
    

    如果你不确定,最好使用:

    var num_id = $(this).attr('class').match(/cat-item-(\d+)/)[1]
    

    【讨论】:

      【解决方案3】:

      我通常使用 .substring(9) 来获取数字,但我想还有比这更好的方法

      我也可以将它放在数据属性值或 id 中以便于参考,如下所示:

      <li class="cat-item" data-catitem-num=8><a href="url" title="View all posts filed under Category III">Category III</a> 
      

      然后在 jquery 中:

      $(".cat-item").click(function(){
        var filterNum = $(this).attr("data-catitem-num");
        $(".filter-"+filterNum).fadeIn(500);
        return false;
      })
      

      或类似的东西

      注意 如果您的元素将具有唯一的“id”,请不要将其放入类中。把它放在一个 id 或 data-attribute 中(所以在你的情况下, catitem 和 filternum 可以在 data-catitem 或 data-filternum 中,也可以在它们的元素 id 中。

      【讨论】:

      • 我不想弄乱 WP 功能,但为了任何人改变我的主题。
      • 我明白了,在这种情况下应该仍然可以工作,尽管有点困难。您必须像以前一样手动获取类名,然后对类名执行 substring(9)。明白了吗?
      • 基本上,子字符串会在第 9 个字符之后返回任何内容,在“cat-item-8”中是第二个 -(给你 8)。如果您有双数字(或更多),它将返回该数字。顺便说一句,这不是 jquery func,这是很好的 js(与 jquery 兼容)
      • 听起来可行@corroded :-) 不熟悉那种方法。可以举个例子吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      • 2012-07-15
      • 2010-12-27
      • 2017-03-15
      • 2021-11-17
      相关资源
      最近更新 更多