Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery对象内的jQuery属性选择器_Jquery_Jquery Selectors_Jquery Filter - Fatal编程技术网

jQuery对象内的jQuery属性选择器

jQuery对象内的jQuery属性选择器,jquery,jquery-selectors,jquery-filter,Jquery,Jquery Selectors,Jquery Filter,我正在尝试设置一个带有多个过滤器的流沙,我正在采用下面的方法,我不确定这是否是最好的 $filteredItems = $containerClone.find('.portfolio-item-marketing').filter(function(index){ if ( $filterA != 'all' && $filterB != 'all' ) { return jQuery(this)

我正在尝试设置一个带有多个过滤器的流沙,我正在采用下面的方法,我不确定这是否是最好的

$filteredItems = $containerClone.find('.portfolio-item-marketing').filter(function(index){

            if ( $filterA != 'all' && $filterB != 'all' )
            {
                return jQuery(this).find('.portfolio-item-marketing[data-type~=' + $filterA + ']') || jQuery(this).find('.portfolio-item-marketing[data-type~=' + $filterB + ']');
            }

            if ( $filterA != 'all' && $filterB == 'all' )
            {
                return jQuery(this+'[data-type~='+$filterA+']')  ;
            }

            if ( $filterA == 'all' && $filterB != 'all' )
            {
                return  jQuery(this).find('.portfolio-item-marketing[data-type~=' + $filterB + ']');
            }

            if ( $filterA == 'all' && $filterB == 'all' )
            {
                return jQuery(this).find('.portfolio-item-marketing');
            }

        });
正如您在代码中看到的,我尝试了两种不同的方法,第一种是if,第二种是if。我不确定是否可以在过滤器中使用find,但我也不知道如何从jQuery对象获取属性

我不能用

jQuery(this).attr('data-type') == $filterA
因为属性可能包含各种过滤器。这就是我尝试使用jQuery的原因~=

我应该放弃并结束使用indexOf吗

HTML标记,例如:

<ul class="filterA filters">
    <li class="active"><a href="javascript:void(0)" class="all">All</a></li>  
    <li><a href="javascript:void(0)" class="digital-books">Digital Books</a></li>
    <li><a href="javascript:void(0)" class="pdf">Pdf</a></li>
</ul>

<ul class="filterB filters">
    <li class="active"><a href="javascript:void(0)" class="all">All</a></li>  
    <li><a href="javascript:void(0)" class="3m">3M</a></li>
    <li><a href="javascript:void(0)" class="mcdonald">Mc Donald</a></li>
    <li><a href="javascript:void(0)" class="sony">Sony</a></li>
</ul>
<div id="portfolio-wrap" class="clearfix">
    <div class="portfolio-item-marketing" data-id="1" data-type="digital-books 3m "></div>
    <div class="portfolio-item-marketing" data-id="1" data-type="pdf 3m "></div>
    <div class="portfolio-item-marketing" data-id="1" data-type="digital-books sony "></div>
    <div class="portfolio-item-marketing" data-id="1" data-type="pdf mcdonald "></div>
</div>

显示您的标记,或具有代表性的样品;我认为这可以更容易/简洁地完成,但我不知道你的过滤器是什么,或者它们来自哪里。这段代码在做什么?我什么都不懂,我会尝试用一些有意义的东西来重命名这些变量。如此杂乱无章的代码和如此多的噪音使得阅读变得非常困难;我必须左右滚动!还有,你听说过干洗店和开关店吗?
jQuery(document).ready(function(){
    if(jQuery().quicksand) {

    portfolio_quicksand();

    }

});

function portfolio_quicksand() {

    // Setting up our variables
    var $filter;
    var $container;
    var $containerClone;
    var $filterLink;
    var $filteredItems

    // Set our filter
    $filterA = jQuery('.filterA li.active a').attr('class');

    $filterB = jQuery('.filterB li.active a').attr('class');

    // Set our filter link
    $filterLink = jQuery('.filters li a');

    // Set our container
    $container = jQuery('#portfolio-wrap');

    // Clone our container
    $containerClone = $container.clone();

    // Apply our Quicksand to work on a click function
    // for each of the filter li link elements
    $filterLink.click(function(e)
    {

        // Remove the active class
        jQuery(this).parent().parent().find('li').removeClass('active');

        // Apply the 'active' class to the clicked link
        jQuery(this).parent().addClass('active');


        // Set our filter
        $filterA = jQuery('.filterA li.active a').attr('class');

        $filterB = jQuery('.filterB li.active a').attr('class');

        $filteredItems = $containerClone.find('.portfolio-item-marketing').filter(function(index){

            if ( $filterA != 'all' && $filterB != 'all' )
            {
                return jQuery(this).find('.portfolio-item-marketing[data-type~=' + $filterA + ']') || jQuery(this).find('.portfolio-item-marketing[data-type~=' + $filterB + ']');
            }

            if ( $filterA != 'all' && $filterB == 'all' )
            {
                return jQuery(this+'[data-type~='+$filterA+']')  ;
            }

            if ( $filterA == 'all' && $filterB != 'all' )
            {
                return  jQuery(this).find('.portfolio-item-marketing[data-type~=' + $filterB + ']');
            }

            if ( $filterA == 'all' && $filterB == 'all' )
            {
                return jQuery(this).find('.portfolio-item-marketing');
            }

        });



        // Finally call the Quicksand function
        $container.quicksand($filteredItems,
        {
            // The duration for the animation
            duration: 750,
            // The easing effect when animating
            easing: 'easeInOutCirc',
            // Height adjustment set to dynamic
            adjustHeight: 'dynamic'
        });
    });
}