Мы используем Drupal для одного из поддерживаемых нами сайтов (и JQuery в качестве библиотеки). Одна из наших страниц использует плагин jquery-isotope (особенно модуль views-isotope) для сортировки в представлениях и fancybox для полного отображения содержимого поля body. Это связано с тем, что в нынешнем виде большая часть содержимого тела скрыта высотой css и параметром overflow:hidden.
Как вы понимаете, такой грубый метод выглядит не очень красиво. Большая часть текста обрезана, оставлены лишние засечки и тому подобное, чтобы он выглядел особенно «грязным». Следующим шагом в этом было усечение текста и добавление «...», чтобы текст не обрезался.
Однако fancybox загружает содержимое в оверлей КАК ЕСТЬ. Поэтому, когда вы усекаете текст тела, он усекается и в оверлее.
По сути, мой вопрос: есть ли способ обрезать текст до тех пор, пока не произойдет щелчок, открывающий fancybox? Как мне отправить полный контент в fancybox, не теряя усечения при нажатии? Когда я запускал jsfiddle для работы над этим, я не включал в свои расчеты ни изотоп, ни fancybox: я просто создал его с помощью подстроки, клонировал исходное содержимое, а затем заменил подстроку по щелчку. Но это, как вы понимаете, ломает страницу, потому что нечего ей говорить ТОЛЬКО делать это по отношению к fancybox, а не просто наугад. Я также не знаю, как возобновить усечение текста при закрытии fancybox.
Вот мой jsfiddle.
Вот html:
<div class="element">
<div class="item">
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy
nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut
wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit
lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure
dolor in hendrerit in vulputate velit esse molestie consequat, vel illum
dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio
dignissim qui blandit praesent luptatum zzril delenit augue duis dolore
te feugait nulla facilisi. </p>
</div>
</div>
Вот css:
.item {
width:300px !important;
height: 150px;
overflow: hidden; }
Вот сценарий:
var originalState = $(".element").clone().text();
$(".item").each(function () {
if ($(this).text().length > 30) {
$(this).text($(this).text().substr(0, 27));
$(this).append('...');
}
});
$(".element").click(function () {
$(this).replaceWith(originalState);
});
Как мне связать это с fancybox, чтобы текст обрезался до тех пор, пока вы не щелкнете, fancybox получит полный текст, а затем при закрытии все вернется к обрезанному стилю раньше?
Примечание. Если я допустил какие-либо фатальные ошибки в своем коде, сообщите мне об этом. Я молод в JavaScript и JQuery, но очень стараюсь учиться.
Спасибо.