最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - TypeError: children.size is not a function with jQuery - Stack Overflow

programmeradmin1浏览0评论

I found a small plugin that will allow me to add simple pages to my html table.

The first thing I did was to create a new js file and added the following code to it.

(function ($) {

    $.fn.SimplePages = function (opts) {
        var self = this;

        var defaults = {
            perPage: 10,
            showPrevNext: false,
            hidePageNumbers: false
        };

        var settings = $.extend(defaults, opts);

        var listElement = self;
        var perPage = settings.perPage;
        var children = listElement.children();
        var pager = $('.pager');

        if (typeof settings.childSelector != "undefined") {
            children = listElement.find(settings.childSelector);
        }

        if (typeof settings.pagerSelector != "undefined") {
            pager = $(settings.pagerSelector);
        }

        var numItems = children.size();
        var numPages = Math.ceil(numItems / perPage);

        pager.data("curr", 0);

        if (settings.showPrevNext) {
            $('<li><a href="#" class="prev_link">«</a></li>').appendTo(pager);
        }

        var curr = 0;
        while (numPages > curr && (settings.hidePageNumbers == false)) {
            $('<li><a href="#" class="page_link">' + (curr + 1) + '</a></li>').appendTo(pager);
            curr++;
        }

        if (settings.showPrevNext) {
            $('<li><a href="#" class="next_link">»</a></li>').appendTo(pager);
        }

        pager.find('.page_link:first').addClass('active');
        pager.find('.prev_link').hide();
        if (numPages <= 1) {
            pager.find('.next_link').hide();
        }
        pager.children().eq(1).addClass("active");

        children.hide();
        children.slice(0, perPage).show();

        pager.find('li .page_link').click(function () {
            var clickedPage = $(this).html().valueOf() - 1;
            goTo(clickedPage, perPage);
            return false;
        });
        pager.find('li .prev_link').click(function () {
            previous();
            return false;
        });
        pager.find('li .next_link').click(function () {
            next();
            return false;
        });

        function previous() {
            var goToPage = parseInt(pager.data("curr")) - 1;
            goTo(goToPage);
        }

        function next() {
            goToPage = parseInt(pager.data("curr")) + 1;
            goTo(goToPage);
        }

        function goTo(page) {
            var startAt = page * perPage,
                endOn = startAt + perPage;

            children.css('display', 'none').slice(startAt, endOn).show();

            if (page >= 1) {
                pager.find('.prev_link').show();
            }
            else {
                pager.find('.prev_link').hide();
            }

            if (page < (numPages - 1)) {
                pager.find('.next_link').show();
            }
            else {
                pager.find('.next_link').hide();
            }

            pager.data("curr", page);
            pager.children().removeClass("active");
            pager.children().eq(page + 1).addClass("active");

        }
    };

}( jQuery ));

Then I am trying to use this plugin like so

$(function () {

    $('#UserToClientRelationTable').SimplePages(
    {
        pagerSelector: '#UserToClientRelationTablePager',
        showPrevNext: true,
        hidePageNumbers: false,
        perPage: 5
    });

});

Unfortunately this code keeps giving me the following error in the console

TypeError: children.size is not a function

And, yes I loaded jQuery before loading this file. In face, if I remove this code and the pagination the rest of my code give me no errors.

How can I fix this problem?

I found a small plugin that will allow me to add simple pages to my html table.

The first thing I did was to create a new js file and added the following code to it.

(function ($) {

    $.fn.SimplePages = function (opts) {
        var self = this;

        var defaults = {
            perPage: 10,
            showPrevNext: false,
            hidePageNumbers: false
        };

        var settings = $.extend(defaults, opts);

        var listElement = self;
        var perPage = settings.perPage;
        var children = listElement.children();
        var pager = $('.pager');

        if (typeof settings.childSelector != "undefined") {
            children = listElement.find(settings.childSelector);
        }

        if (typeof settings.pagerSelector != "undefined") {
            pager = $(settings.pagerSelector);
        }

        var numItems = children.size();
        var numPages = Math.ceil(numItems / perPage);

        pager.data("curr", 0);

        if (settings.showPrevNext) {
            $('<li><a href="#" class="prev_link">«</a></li>').appendTo(pager);
        }

        var curr = 0;
        while (numPages > curr && (settings.hidePageNumbers == false)) {
            $('<li><a href="#" class="page_link">' + (curr + 1) + '</a></li>').appendTo(pager);
            curr++;
        }

        if (settings.showPrevNext) {
            $('<li><a href="#" class="next_link">»</a></li>').appendTo(pager);
        }

        pager.find('.page_link:first').addClass('active');
        pager.find('.prev_link').hide();
        if (numPages <= 1) {
            pager.find('.next_link').hide();
        }
        pager.children().eq(1).addClass("active");

        children.hide();
        children.slice(0, perPage).show();

        pager.find('li .page_link').click(function () {
            var clickedPage = $(this).html().valueOf() - 1;
            goTo(clickedPage, perPage);
            return false;
        });
        pager.find('li .prev_link').click(function () {
            previous();
            return false;
        });
        pager.find('li .next_link').click(function () {
            next();
            return false;
        });

        function previous() {
            var goToPage = parseInt(pager.data("curr")) - 1;
            goTo(goToPage);
        }

        function next() {
            goToPage = parseInt(pager.data("curr")) + 1;
            goTo(goToPage);
        }

        function goTo(page) {
            var startAt = page * perPage,
                endOn = startAt + perPage;

            children.css('display', 'none').slice(startAt, endOn).show();

            if (page >= 1) {
                pager.find('.prev_link').show();
            }
            else {
                pager.find('.prev_link').hide();
            }

            if (page < (numPages - 1)) {
                pager.find('.next_link').show();
            }
            else {
                pager.find('.next_link').hide();
            }

            pager.data("curr", page);
            pager.children().removeClass("active");
            pager.children().eq(page + 1).addClass("active");

        }
    };

}( jQuery ));

Then I am trying to use this plugin like so

$(function () {

    $('#UserToClientRelationTable').SimplePages(
    {
        pagerSelector: '#UserToClientRelationTablePager',
        showPrevNext: true,
        hidePageNumbers: false,
        perPage: 5
    });

});

Unfortunately this code keeps giving me the following error in the console

TypeError: children.size is not a function

And, yes I loaded jQuery before loading this file. In face, if I remove this code and the pagination the rest of my code give me no errors.

How can I fix this problem?

Share Improve this question edited May 23, 2017 at 10:31 CommunityBot 11 silver badge asked Sep 27, 2016 at 0:09 JaylenJaylen 40.3k43 gold badges137 silver badges226 bronze badges
Add a comment  | 

2 Answers 2

Reset to default 18

size() was deprecated a long time ago and completely removed from jQuery 3

The norm is to use length property instead

See size() docs

if you are using a version less than 3, then problem is likely elsewhere and we need more info

use length returns the number of matched elements: https://api.jquery.com/length/

var numItems = children.length;
发布评论

评论列表(0)

  1. 暂无评论