在我的页面上,我有一个按钮,可以将所有<article>
内容从它的容器中解开,然后将每个容器分别包装到<section>
. 我的问题是是否可以通过单击一个按钮来反转该操作,以便所有的<article>
人都回到他们开始时的相同位置?
我创建了一个示例:
在我的页面上,我有一个按钮,可以将所有<article>
内容从它的容器中解开,然后将每个容器分别包装到<section>
. 我的问题是是否可以通过单击一个按钮来反转该操作,以便所有的<article>
人都回到他们开始时的相同位置?
我创建了一个示例:
您需要预先标记每个<article>
标签,以识别<section>
它们所在的位置。将其放入其中class
是个好主意,例如:
$('article').addClass(function() {
return 'section-' + $(this).parent().index();
});
当您将它们包装起来时,您需要将它们分组class
。
$('#wrapback').click(function() {
$('article').unwrap();
for (var i = 0; i < sections; ++i) {
var articles = $('article.section-' + i);
articles.wrapAll('<section/>');
}
});
我的方法只是使用 jQuery.clone();
方法。
参考:jsFiddle
jQuery代码:
var oldWrap = $('#wrapper').clone();
$('#unwrap').click(function() {
$('article').unwrap();
$('article').wrap('<section></section>');
});
$('#wrapback').click(function() {
$('#wrapper').replaceWith(oldWrap);
oldWrap = $('#wrapper').clone();
});
尝试添加一些属性或.data
对每个属性article
进行分组,然后使用.wrapAll
.
也许最简单的方法是使用循环addClass
的索引.each
,因为您可以快速找到articles
给定类的所有内容并将它们包装在一起。
一种实现:
$('#unwrap').on('click', function() {
$('section').each(function(i, el) {
$(this).find('article').addClass('_index_'+i).unwrap();
});
$('article').wrap('<section></section>');
});
$('#wrapback').on('click', function() {
var idx = 0;
while ($('article._index_' + idx).length) {
$('article._index_' + idx).unwrap().wrapAll('<section>');
idx += 1;
};
});
您可以使用重新包装它们.wrapAll
。
基本代码是这样的:
演示:http: //jsfiddle.net/SO_AMK/UhWqa/
jQuery:
$('#unwrap').click(function() {
$('article').unwrap()
$('article').wrap('<section></section>')
})
$("#wrapback").click(function() {
$("article").unwrap().wrapAll("<section></section>");
});
HTML:原始
CSS:原创
jquery.wrapAll()是您需要的,但是您必须区分每组文章(例如将它们包装在 div 中),否则该wrapAll
方法会将您的所有文章包装在一个中section