Развертывание jQuery Reverse
На моей странице есть кнопка, которая разворачивает все <article>
из его контейнеров и после этого заверните каждый в <section>
, Мой вопрос: возможно ли отменить это действие, нажав кнопку, чтобы все <article>
будет ли группа обратно в ту же позицию, в которой они были в начале?
Я создал пример:
5 ответов
Мой метод просто использует 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();
});
Вам нужно предварительно пометить каждый из ваших <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/>');
}
});
рабочая демонстрация на http://jsfiddle.net/alnitak/QKLkV/
Попробуйте добавить какой-либо атрибут или .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: оригинал
http://api.jquery.com/wrapAll/ - это то, что вам нужно, но вам придется различать каждую группу статей (например, оборачивать их в div), иначе wrapAll
метод обернет все ваши статьи в один section