Вот пример, который делает то, что вы хотите.Я упростил ваш код, поэтому вам не нужно вручную идентифицировать каждую запись и предварительный просмотр.
http://jsfiddle.net/jqmPc/1/
Это немного сложно.Дайте мне знать, если у вас есть вопросы.
Как правило, при изменении размера окна сценарий проходит и находит первый предварительный просмотр в каждой строке, находя предварительный просмотр с тем же левым смещением, что и у самого первого.Затем он добавляет класс last
к записи до (предыдущая строка) и класс first
к этому предварительному просмотру.Я делаю css clear: left
на обоих из них, чтобы все открывалось нормально при открытии записей.
Я сделал ваш код универсальным, без идентификаторов:
<div class="preview">
<p>Some preview text <a class="trigger" href="#">…</a></p>
</div>
<div class="entry">
<div class="close_button">
<a class="close" href="#">×</a>
</div>
<p>Some content text.</p>
</div>
Это не заставляет васпишите один и тот же код снова и снова.
Сценарий открытия / закрытия:
$('.trigger').click(function() {
$('.openEntry').slideUp(800); // Close the open entry
var preview = $(this).closest('.preview'); // Grab the parent of the link
// Now, clone the entry and stick it after the "last" item on this row:
preview.next('.entry').clone().addClass('openEntry').insertAfter(preview.nextAll('.last:first')).slideDown(800);
});
// Use "on()" here, because the "openEntry" is dynamically added
// (and it's good practice anyway)
$('body').on('click', '.close', function() {
// Close and remove the cloned entry
$('.openEntry').slideUp(800).remove();
});
Я уверен, что это можно немного упростить, особенно если вы готовы переформатировать свой HTML aнемного больше, поместив запись в элемент предварительного просмотра (но все еще скрытый).Вот немного более простая версия с html-изменением:
http://jsfiddle.net/jqmPc/2/
(я также окрашиваю первый и последний элемент в строке, чтобы вы могли видеть, что происходит)