Wrap every 3 divs in a div

前端 未结 6 1865
执念已碎
执念已碎 2020-11-22 09:03

Is it possible to use nth-child selectors to wrap 3 divs using .wrapAll? I can\'t seem to work out the correct equation.

so...



        
6条回答
  •  孤街浪徒
    2020-11-22 09:41

    $(function() {
        $.fn.WrapThis = function(arg1, arg2) { /*=Takes 2 arguments, arg1 is how many elements to wrap together, arg2 is the element to wrap*/
    
            var wrapClass = "column"; //=Set class name for wrapping element
    
            var itemLength = $(this).find(arg2).length; //=Get the total length of elements
            var remainder = itemLength%arg1; //=Calculate the remainder for the last array
            var lastArray = itemLength - remainder; //=Calculate where the last array should begin
    
            var arr = [];
    
            if($.isNumeric(arg1))
            {
                $(this).find(arg2).each(function(idx, item) {
                    var newNum = idx + 1;
    
                    if(newNum%arg1 !== 0 && newNum <= lastArray){
                        arr.push(item);
                    }
                    else if(newNum%arg1 == 0 && newNum <= lastArray) {
                        arr.push(item);
                        var column = $(this).pushStack(arr);
                        column.wrapAll('
    '); //=If the array reaches arg1 setting then wrap the array in a column arr = []; } else if(newNum > lastArray && newNum !== itemLength){ //=If newNum is greater than the lastArray setting then start new array of elements arr.push(item); } else { //=If newNum is greater than the length of all the elements then wrap the remainder of elements in a column arr.push(item); var column = $(this).pushStack(arr); column.wrapAll('
    '); arr = [] } }); } } });

    I took Kyle's plugin idea and extended it to wrap automatically and take two arguments. It didn't work for me to begin with, but I got it running with a few edits and additions to the code.

    To invoke the function just use the parent element of what you want to wrap and then set your arguments as follows.

    $('#container').WrapThis(5, 'li');
    

    The first argument is how many elements you want to wrap together and the second argument is the element type you would like to wrap.

    You can change the class of the wrapping element in the main function under the variable wrapClass.

提交回复
热议问题