我正在编写一个
的脚本<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>'));
});
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()替换它,这将有效)
答案 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>'));
});
另外,您会看到:DEMO USING SLICE