Есть ли способ в HTML добавить ссылку "продолжить чтение" в середине сообщения в блоге, которое отображает остальную часть сообщения, не переходя на другую страницу. Например, читатель нажимает "продолжить чтение", и остальная часть сообщения появляется только под ним, без необходимости загружать сообщение.
Пример: https://www.goodreads.com/book/show/6404873-penelope-and-the-preposterous-birthday-party
Кнопка "больше не принимает вас нигде, просто работает на странице.
благодаря
просто работает внутри страницы... показывая скрытый <span>
(который сделает контейнер <div>
увеличивать его высоту).
Довольно наивная реализация (я буду использовать jQuery) будет:
<div>
This is a very long post. You read only first paragraph
but there is much more.
<a href="#" id="expand-post">Continue reading</a>
<span id="extra-text" style="display: none">
You see? I had much more to say about this topic.
</span>
</div>
С помощью этого JavaScript:
$("#expand-post").click(function () {
$(this).hide();
$("#extra-text").show();
});
Теперь мы можем сделать лучше, этот код довольно легко стать более общим. Позвольте сделать это шаг за шагом. Firt из всех пусть удалить эти уродливые идентификаторы, учитывая общую структуру, как это:
<div>
Preview text.<a href="# class="expand-post">Continue reading</a>
<span style="display:none">Complete text.</span>
</div>
Вы можете иметь тот же результат, если предположить, что элемент <span>
всегда после нажатия <a>
:
$(".expand-post").click(function () {
$(this).hide().next().show();
});
Это работает, но текст может поступать из БД, тогда вы не можете настроить такую разметку. Позвольте сделать еще один шаг, чтобы упростить его использование (ограничен простым текстом, но он может быть исправлен и для работы с HTML). На самом деле вам не нужно вручную разделять текст с помощью этой разметки:
<div class="split-text">
This is a very long text. You'll see a preview only but with a simple
click you can read the full text. As you can see it can be done with
few JavaScript lines.
<div>
И этот JavaScript вы получите тот же результат (длина текста предварительного просмотра установлена равной 32, но это произвольно, обратите внимание, что это полностью непроверено):
$(".split-text").each(function (index, element)) {
var fullText = $(this).text();
far previewText = fullText.substr(0, 32);
$(element).empty()
.append($("<span>").text(previewText)).one("click", function () {
$(this).replaceWith($("<span>").text(fullText));
});;
});
<span>
(который увеличит его контейнер<div>
).