wrapAll不使用对象数组

时间:2013-05-24 13:39:08

标签: jquery object wrapping

我正在编写一个

的脚本
  1. 采用元素
  2. 将这些元素拆分为更小的子数组
  3. <div>
  4. 包装这些子数组

    我有这个工作:

    var elems = $('p');
    
    content = [];
    temp = [];
    
    for(var i = 0; i < elems.length; i++) {
        var elem = elems[i];
        temp.push(elem);
        if (i === 2 || i+1 === elems.length) {
            content.push(temp);
            temp = [];
        }
    };
    
    console.log(content);
    
    $.each(content, function(i) {
        var elem = $(this);
        elem.wrapAll($('<div class="wrapper"></div>'));
    });
    

    see this fiddle 这使用包含元素

    的对象

    然而,当我返回jQuery对象而不仅仅是元素时,wrapAll()函数突然中断,抛出TypeError:Value does not implement interface Node.而其他函数(替换wrapAll)不会中断(如wrap()或wrapInner())。

    代码:

    var elems = $('p');
    
    content = [];
    temp = [];
    
    for(var i = 0; i < elems.length; i++) {
        var elem = $(elems[i]);
        temp.push(elem);
        if (i === 2 || i+1 === elems.length) {
            content.push(temp);
            temp = [];
        }
    };
    
    console.log(content);
    
    $.each(content, function(i) {
        $(this).wrapAll($('<div class="wrapper"></div>'));
    });
    

    请参阅this Fiddle(小提琴抛出另一个TypeError:上下文未定义,但我认为这是由于jsfiddle使用框架的方式)。

    我可能接近这个错误吗?但是不应该包裹所有工作吗? (在第二个小提琴中用wrap()替换它,这将有效)

1 个答案:

答案 0 :(得分:2)

试试这个:

var elems = $('p').get();

content = [];
temp = [];

for (var i = 0; i < elems.length; i++) {
    var elem = elems[i];
    temp.push(elem);
    if (i === 2 || i + 1 === elems.length) {
        content.push(temp);
        temp = [];
    }
};

console.log(content);

$.each(content, function (i) {
    $(this).wrapAll($('<div class="wrapper"></div>'));
});

FIDDLE DEMO

另外,您会看到:DEMO USING SLICE