javascript - 无法附加到第二个容器

标签 javascript jquery css

我有以下脚本:

(function($) {

    $.fn.easyPaginate = function(options){

        var defaults = {                
            step: 4,
            delay: 100,
            numeric: true,
            nextprev: true,
            controls: 'pagination',
            current: 'current' 
        }; 

        var options = $.extend(defaults, options); 
        var step = options.step;
        var lower, upper;
        var children = $(this).children();
        var count = children.length;
        var obj, next, prev;        
        var page = 1;
        var timeout;
        var clicked = false;

        function show(){
            clearTimeout(timeout);
            lower = ((page-1) * step);
            upper = lower+step;
            $(children).each(function(i){
                var child = $(this);
                child.hide();
                if(i>=lower && i<upper){ setTimeout(function(){ child.fadeIn('fast') }, ( i-( Math.floor(i/step) * step) )*options.delay ); }

                if(options.nextprev){
                    if(upper >= count) { next.addClass('stop'); } else { next.removeClass('stop'); };
                    if(lower >= 1) { prev.removeClass('stop'); } else { prev.addClass('stop'); };
                };
            });    
            $('li','#'+ options.controls).removeClass(options.current);
            $('li[data-index="'+page+'"]','#'+ options.controls).addClass(options.current);

            if(options.auto){
                if(options.clickstop && clicked){}else{ timeout = setTimeout(auto,options.pause); };
            };
        };

        function auto(){
            if(upper <= count){ page++; show(); }       
            else { page--; show(); }          
        };

        this.each(function(){ 

            obj = this;

            if(count>step){

                var pages = Math.floor(count/step);
                if((count/step) > pages) pages++;
                var ol = $('<ol id="'+ options.controls +'" class="pagin"></ol>').insertAfter(obj);

      if(options.nextprev){
            prev = $('<li class="prev">prev</li>')
                .appendTo(ol)
                .bind('click', function() {

                    //check to see if there are any more pages in the negative direction
                    if (page > 1) {
                        clicked = true;
                        page--;
                        show();
                    }
                });
        }

                if(options.numeric){
                    for(var i=1;i<=pages;i++){
                    $('<li data-index="'+ i +'">'+ i +'</li>')
                        .appendTo(ol)
                        .click(function(){    
                            clicked = true;
                            page = $(this).attr('data-index');
                            show();
                        });                    
                    };                
                };

        if(options.nextprev){
            next = $('<li class="next">next</li>')
                .appendTo(ol)
                .bind('click', function() {

                    //check to see if there are any pages in the positive direction
                    if (page < (count / 4)) {
                        clicked = true;         
                        page++;
                        show();
                    }
                });
        }

                show();
            };
        });    
    };    

})(jQuery);


    jQuery(function($){
    $('ul.news').easyPaginate({step:4});
    }); 

这是一个类似旋转木马的插件,为导航生成这个 html 结构:

<ol id="pagination" class="pagin"><li class="prev">prev</li><li data-index="1" class="">1</li><li data-index="2" class="">2</li><li data-index="3" class="current">3</li><li class="next stop">next</li></ol>

我只想将此列表包含在一个 div 中。看起来很简单,但是 appendTo 不想与我合作,或者我做错了什么(如果你能帮助我理解那是什么,我将不胜感激..)

所以我这样修改:

var ol = $('<ol id="'+ options.controls +'" class="pagin"></ol>');
var tiv = $('<div id="lala"></div>');
ol.appendTo('#lala');
tiv.insertAfter(obj);

我知道如何链接,但我处于“调试”模式,试图理解为什么我没有得到我想得到的结果:

<div id="lala>
<ol id="pagination><li>...... </li></ol>
</div>

我尝试放置一些 console.log 来查看我的变量的状态,但找不到有用的东西。我想我没有得到 DOM 插入的东西。

最佳答案

您要附加 <ol>元素到 #lala在将后者添加到文档之前。这没有任何问题,但由于您使用的是 id 选择器,并且目标元素还不是文档的一部分,因此选择器不会匹配任何内容。

要解决这个问题,你可以这样写:

var ol = $('<ol id="'+ options.controls +'" class="pagin"></ol>');
var tiv = $('<div id="lala"></div>');
ol.appendTo(tiv);
tiv.insertAfter(obj);

或者:

var ol = $('<ol id="'+ options.controls +'" class="pagin"></ol>');
var tiv = $('<div id="lala"></div>');
tiv.insertAfter(obj);
ol.appendTo('#lala');

关于javascript - 无法附加到第二个容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11222801/

相关文章:

jquery - 在鼠标悬停在菜单上时将焦点从下拉列表设置为窗口

jquery - 如何缩小包含文本的div?

javascript - 使用坐标裁剪图像

javascript - 测试服务器的响应

javascript - HTML5/jQuery - 在旧浏览器上隐藏内容?

javascript - 从 json 结果中提取数据标签

javascript - Node js 添加所需的模型

jQuery 语法错误,无法识别的表达式 : [name=Basics. 性别]

css - 使用 CSS 进行响应式设计编辑

javascript - 关于调整文本区域大小的指针