【问题标题】:Find text on a string with jquery使用 jquery 在字符串上查找文本
【发布时间】:2013-08-21 12:21:22
【问题描述】:

我的 jquery 条件有问题。

让我给你看代码。

这里有“过滤器”栏:

    <div id="filter_menu">

    <label>Filter By:</label>
    <ul>
        <li>
            <a href="#" tags="all">ALL</a>
        </li>
        <li>
            <a href="#" tags="audio" class="filterFunction">audio</a>
        </li>
        <li>
            <a href="#" tags="video" class="filterFunction">video</a>
        </li>
        <li>
            <a href="#" tags="other" class="filterFunction">other</a>
        </li>
    </ul>
 </div>

这里是我想通过栏中的选项过滤的内容列表:

<ul>
    <li tags="audio video" class="li_item">
       content
    </li>
    <li tags="video" class="li_item">
       content
    </li>
    <li tags="audio" class="li_item">
       content
    </li>
    <li tags="video other" class="li_item">
       content
    </li>
    <li tags="audio other" class="li_item">
       content
    </li>
    <li tags="other" class="li_item">
       content
    </li>
</ul>

现在有了 jQuery sn-p:

$(".filterFunction").click(function () {

        categoryFilter = $(this).attr("tags");

        $('.item_li').each(function () {
            if ($(this).attr("tags") == categoryFilter) {
                alert('true');
                }
            else {
                alert('false');
                }
            });

     });

这里的问题: 属性标签中包含多个“标签”的内容永远不会是真的! 我需要一个条件,当它在属性标签中找到一个“标签”时变为真!!!

请有人帮帮我!!

非常感谢! 对不起我的英语:)

【问题讨论】:

  • jquery 是 javascript 的一部分,而不是 java。 Java 是完全不同的东西。
  • 对不起...谢谢
  • 不必抱歉,这是一个常见的误解,人们通常认为 javascript 和 java 是同一个.. 或者 jquery 与 javascript 不同。是的,Java 本身就是一种不同的语言。但是 jQuery 只是一个基于 javascript 构建的库,让您能够快速编写代码,而不是花费大量时间为每件事情编写代码,就像您可能传统上使用 javascript 示例多个浏览器 hack 所做的那样,等等。

标签: javascript jquery html wordpress filter


【解决方案1】:

试试

$(".filterFunction").click(function () {

    categoryFilter = $(this).attr("tags");

    $('.li_item').each(function () {
        var tags = $(this).attr("tags").split(' ');
        if ($.inArray(categoryFilter, tags) > -1) {
            alert($(this).attr("tags") + ': true');
        } else {
            alert($(this).attr("tags") + ': false');
        }
    });

});

演示:Fiddle

【讨论】:

  • 非常感谢你救了我的命。 ;) 但我更喜欢克里斯的答案,因为它更短!!!
  • @ZimoneIntheJungle 如果有像tags="musicalaudio" 这样的标签会出现问题,因为它会为audio 返回true
  • 如果您从我的示例中调整定义 my_var 的逻辑,以更好地满足您将要遇到的整体需求,并针对任何情况调整 tags=(看到有多个选择器,您可以避免通配符的陷阱)您最终无需循环,拆分字符串,将字符串与数组进行比较来节省过程。我并不是说我的例子是一个最终的解决方案。但从长远来看,如果你有很多li,例如你会遇到减速。所以我的例子更像是一个起点
【解决方案2】:

为什么不用$.each(); 来遍历所有内容,为什么不使用 tags 属性来选择具有您特别寻找的键的那些:

var my_var = 'other';
$('.li_item[tags*="'+my_var+'"]');

然后专门与那些合作。还有多种选择器类型来完善这个概念,查看http://www.w3schools.com/jquery/jquery_ref_selectors.asp 示例。上面的一个是一个外卡匹配,其中至少有“其他”。但是你可以告诉它所有,但是,只有,等等。

【讨论】:

    猜你喜欢
    • 2010-10-29
    • 2011-10-11
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多