0

好的,所以我正在使用流沙 jquery 过滤器。现在我想在选择任何过滤器时为所有图像添加特定效果(我在 javascript 中输入)。过滤器列表如下:-

<ul class="filter"> 
   <li class="current all"><a href="#">Fred</a></li> 
   <li class="daisy"><a href="#">daisy</a></li> 
   <li class="richard"><a href="#">richard</a></li> 
   <li class="ama"><a href="#">ama</a></li> 
   <li class="santy"><a href="#">santy</a></li> 
   <li class="washington"><a href="#">washington</a></li> 
   <li class="deuces"><a href="#">deuces</a></li> 
</ul> 

所以我使用以下语法来确定选定的过滤器并从那里处理一些 jquery 'magic'。

    $(".filter a").click(function(e){

    $(".filter li").removeClass("current"); 

    // Get the class attribute value of the clicked link
    var $filterClass = $(this).parent().attr("class");

    if ( $filterClass == "all" ) {
        var $filteredPortfolio = $portfolioClone.find("li");
    } else {
        var $filteredPortfolio = $portfolioClone.find("li[data-type~=" + $filterClass + "]");
        $filteredPortfolio.addClass("row3");
    }

现在要将特殊效果添加到所选过滤器的所有图像(例如摄影),我添加了您在最后一行看到的这段代码,基本上是因为当我在浏览器中调试它时,$("$filteredPortfolio").addClass("row3")该效果适用于该类的所有元素row3,它无法工作。我究竟做错了什么?我仍然认为自己是 jquery 新手,所以如果答案很明显,请原谅我。

4

1 回答 1

1

你的最后一行应该是:

$filteredPortfolio.addClass("row3");

.find() 已经生成了一个 jQuery 对象,所以不需要额外的 $()

您正在过滤[data-type=..],如果在 HTML 中定义了 data-type 属性,这很好,但如果您通过 .data('type', val) jQuery api 设置它,它将不起作用。要让过滤器找到它,您必须使用 .attr('data-type', val)。较新版本的 jQuery 更好地区分数据和属性,它们实际上是分开的东西。jQuery 曾经将它们混为一谈并交替使用它们可能在旧版本中有效。

于 2012-06-26T18:03:57.747 回答