首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包装器忽略jQuery中隐藏的div

包装器忽略jQuery中隐藏的div
EN

Stack Overflow用户
提问于 2012-09-22 19:36:45
回答 2查看 1.2K关注 0票数 1

我正在使用这个小的包装器插件:

https://github.com/tsevdos/nwrapper

代码语言:javascript
复制
(function($) {

$.fn.nwrapper = function(options){

    var defaults = {
        wrapEvery : 1,
        defaultClasses : true,
        extraClasses : false,
        htmlStructure : 'div'
    };

    settings = $.extend({}, defaults, options);

    var elements = $(this).children();
    var elementsLen = elements.length;

    for ( var i = 0, numb = 1; i < elementsLen; i += settings.wrapEvery, numb++ ){

        // Default Classes Array
        var classes = [];
        if ( settings.defaultClasses ) {

            classes[0] = 'wrapper';
            classes[1] = 'wrapper-' + numb;

            if (numb==1) {
                classes[2] = 'first';
            }

            if (numb==Math.ceil(elementsLen/settings.wrapEvery)) {
                classes[2] = 'last';
            }

        }

        // Merge Default class with Extra Class
        if ( settings.extraClasses ) {
            $.merge( classes, settings.extraClasses );
        }

        // If you find any classes crete the class string
        if ( classes.length > 0 ) {
            htmlClassesString = 'class="' + classes.join(" ") + '"';
        } else {
            htmlClassesString = '';
        }

        elements.filter(':eq(' + i + '), :lt(' + (i + settings.wrapEvery) + '):gt(' + i + ')').wrapAll('<' + settings.htmlStructure + ' ' + htmlClassesString + ' />');

    }

    return $(this);
};

})(jQuery);

基本布局为:

代码语言:javascript
复制
<div id="container">
   <div class="filter1">Value</div>
   <div class="filter2">Value</div> 
   <div class="filter3">Value</div> 
   <div class="filter1">Value</div> 
   <div class="filter2">Value</div> 
   <div class="filter3">Value</div>
   <div class="filter1">Value</div> 
   <div class="filter2">Value</div> 
   <div class="filter3">Value</div>  
   ... 
</div> 

正在初始化插件:

代码语言:javascript
复制
$('#container').nwrapper({ wrapEvery : 3 });

我使用选择过滤器来隐藏/显示子div,然后重新初始化插件。我想知道是否有可能从包装计数中排除隐藏的div?

最后,我使用jQuery周期来显示包装的div,因此隐藏的div应该在包装中(但不计算在内)。否则,cycle会将每个隐藏的div视为一个项目。

也许这个插件并不是我想要实现的最佳工具。它将产生以下结果:

我希望每隔三个可见的div包装一次,但也要包含隐藏的div。

代码语言:javascript
复制
<div id="container">
  <div class="wrapper wrapper-1 first">
    <div class="filter1">Value</div>
    <div class="filter2">Value</div>
    <div class="filter3" style="display:none;">Value</div>
    <div class="filter1">Value</div>
  </div>
  <div class="wrapper wrapper-2 last">
    <div class="filter2">Value</div>
    <div class="filter3" style="display:none;">Value</div>
    <div class="filter1">Value</div>
    <div class="filter2">Value</div>
    <div class="filter3" style="display:none;">Value</div>
  </div>
</div>

EN

回答 2

Stack Overflow用户

发布于 2012-09-22 19:49:35

你可以尝试使用:visible选择器,尽管我不确定它在IE上有多好用。

http://api.jquery.com/visible-selector/

票数 0
EN

Stack Overflow用户

发布于 2012-09-22 19:50:41

您可以对插件进行相应的修改。喜欢

替换为:

代码语言:javascript
复制
var elements = $(this).children();

使用

代码语言:javascript
复制
var elements = $(this).children(":visible");

=====================================================================

@teeraina,就你的问题而言,“我需要将隐藏的div包含在封装div中(但不包括在内)”,你可以尝试这样做:

代码语言:javascript
复制
var elements = $(this).children();
var elementsLen = $(this).children(":visible").length;

希望这能有所帮助!!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12543376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档