1

我正在写一个脚本

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

我有这个工作:

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>'));
});

看到这个小提琴 这使用了一个包含元素的对象

但是,当我返回 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>'));
});

看到这个 Fiddle(fiddle 抛出另一个 TypeError: context is undefined,但我认为这是由于 jsfiddle 使用框架的方式)。

我可能接近这个错误吗?但是 wrapAll 不应该工作吗?(用第二个小提琴中的 wrap() 替换它,这样就可以了)

4

1 回答 1

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>'));
});

小提琴演示

此外,您会看到:DEMO USING SLICE

于 2013-05-24T13:46:13.927 回答