javascript - 如何使用 jQuery 查找数据类型中的特定字符串?

标签 javascript jquery

我正在 http://shoeshinedesign.com/css/portfolio/ 动态排序投资组合

第一个列出的项目有两个类别:“todd-ao”和“soundelux”。顶部的过滤按钮通过 jQuery 对项目进行排序,连接过滤按钮的 li 类和特定项目的 data-type

由于过滤器按钮由一个类标记,因此每当我在 data-type 参数中有两个类别时,jQuery 脚本就无法识别 data-type< 中的每个特定单词。/.

我需要修改我的 jQuery,以允许在数据类型 中使用多个单词,并且按钮仍能进行相应排序。

这是我的 HTML 标记:

<!-- FILTER BUTTONS -->
<ul class="portfoliofilter">
  <li class="all">
    <a href="#">All</a>
  </li>
  <li class="todd-ao">
    <a href="#">Todd-AO</a>
  </li>
  <li class="soundelux">
    <a href="#">Soundelux</a>
  </li>
</ul>

<!-- PROJECT LISTING -->

<ul id="portfoliolist3column"> 
  <li class="portfolio" data-type="todd-ao soundelux">
    <!-- 
        THIS PROJECT WON'T SORT DUE TO DATA-TYPE
        NOT SPECIFICALLY MATCHING FILTER LI CLASS
    -->
  </li>
  <li class="portfolio" data-type="todd-ao">
    <!-- SORTS -->
  </li>
  <li class="portfolio" data-type="soundelux">
    <!-- SORTS -->
  </li>
</ul>

jQuery 标记:(重点关注条件的 else)

jQuery('.portfoliofilter li').click(function(e) {
  jQuery(".portfoliofilter li a").addClass("portfoliobutton_noselect");
  jQuery(".portfoliofilter li a").removeClass("portfoliobutton");   
  jQuery(this).children('a').removeClass("portfoliobutton_noselect");
  jQuery(this).children('a').addClass("portfoliobutton");

  var filterClass = jQuery(this).attr('class');

  if (filterClass == 'all') {
    var $filteredData = $data.find('.portfolio');
  } else {
    var $filteredData = $data.find('.portfolio[data-type=' + filterClass + ']');
  }

  jQuery($list).quicksand($filteredData, {
    duration: 500,
    easing: 'swing',
    adjustHeight: 'dynamic',
    enhancement: function() { }
  }, function() {
    addPrettyPhoto();
  });

  return false;
});

有没有办法让$data.find只查找字符串而不是与filterClass完全匹配?


编辑
这是最终的上下文代码,由下面的 @pimvdb 提供。

jQuery('.portfoliofilter li').click(function(e) {

            jQuery(".portfoliofilter li a").addClass("portfoliobutton_noselect");
            jQuery(".portfoliofilter li a").removeClass("portfoliobutton"); 
            jQuery(this).children('a').removeClass("portfoliobutton_noselect");
            jQuery(this).children('a').addClass("portfoliobutton");

            var filterClass = jQuery(this).attr('class');

            if (filterClass == 'all') {
                var $filteredData = $data.find('.portfolio');
            } else {
                var $filteredData = $data.find(".portfolio").filter(function() {
                    return ~jQuery(this).data("type").split(" ").indexOf(filterClass);
                  });
            }

            jQuery($list).quicksand($filteredData, {
                duration: 500,
                easing: 'swing',
                adjustHeight: 'dynamic',
                enhancement: function() {

                }
            }, function(){
                addPrettyPhoto();
            });

            return false;
        });

最佳答案

您可以将函数传递给 .find 并拆分 data- 项:http://jsfiddle.net/mXbGJ/ 。这是这个想法的一个例子,不是您案例的精确实现,但我想很容易将其粘贴到您的代码中:

$("...").find(function() {
    return ~$(this).data("items").split(" ").indexOf("b");
}).css("background-color", "red");
<小时/>

编辑:这记录了我认为正确的:

jQuery('.portfoliofilter li').click(function() {
  var x = jQuery(this).attr("class");
  console.log($("#portfoliolist3column").find(".portfolio").filter(function() {
    return ~jQuery(this).data("type").split(" ").indexOf(x);
  }));
});

关于javascript - 如何使用 jQuery 查找数据类型中的特定字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10821667/

相关文章:

javascript - JS对象按值复制与按引用复制

javascript - react : setting background image for a file present on the server

javascript - 通过点击选项获取值

javascript - 更改对象的属性也会影响另一个对象

javascript - 标题在滚动时缩小,但当滚动到变化点时会发生闪烁

javascript - 获取 div id 和类

javascript - 捕获来自客户端的 HTTP 请求(包括 ajax)

javascript - $index 不存在于 ng-repeat 中 - 答案在我原来的帖子中

javascript - 如果少于 3 个 div,则显示其他 div

jquery - 单击并使用 Jquery 显示 <div> 中的内容