jquery: создать скрытый элемент + slideToggle
У меня есть div, который содержит ряд p. ситуация выглядит следующим образом:
<div id="container">
<p>blabla</p>
<p>blabla</p>
<p id="my_id">blabla</p>
<p>blabla</p>
<p>blabla</p>
<p>etc...</p>
</div>
Как видите, блабла много. Я хочу добавить <a href>read more</a>
к <p#my_id>
.
Все <p>
после ссылки read more должны быть скрыты. Как только ссылка нажата, она должна исчезнуть, и все <p>
должны скользить как один объект.
<p>
должны быть завернуты в скрытый div, который позже будет скользить внутрь.
Я надеюсь, что моя мысль понятна.
Спасибо. продвижение.
5 ответов:
Вы можете просто дать элементы, которые вы хотите скрыть класс, и скрыть их по умолчанию с помощью CSS, а затем просто показать их, как только ссылка нажата.
CSS
.read-more-content { display: none; }
JQuery
$(document).ready(function() { $('#read-more-link').click(function(e) { e.preventDefault(); $(this).fadeOut(); $('.read-more-content').slideToggle(); }); });
HTML
<div id="container"> <p id="my_id"> blabla <a href="#" id="read-more-link">Read More</a> </p> <p class="read-more-content">This is some hidden content</p> <p class="read-more-content">This is some more hidden content</p> </div>
Если вы хотите полагаться исключительно на jQuery, чтобы добавить якорь и скрыть "read-more-content" , вы можете сделать следующее: -
JQuery
$(document).ready(function() { $('.read-more-content').hide(); $('<a href="#" id="read-more-link">Read More</a>').appendTo('#my_id'); $('#read-more-link').click(function(e) { e.preventDefault(); $(this).fadeOut(); $('.read-more-content').slideToggle(); }); });
HTML
<div id="container"> <p id="my_id"> blabla </p> <p class="read-more-content">This is some hidden content</p> <p class="read-more-content">This is some more hidden content</p> </div>
Надеюсь, это поможет
Попробуйте это:
var $afterP = $("#my_id").nextAll("p").hide(); var $readMore = $("<a></a>").attr("href", "#").addClass("read-more").text("Read more").appendTo("#my_id"); $("#container").on('click', '.read-more', function() { $afterP.slideToggle(); });
Это скроет любые и все элементы
p
после#my_id
, и не будет иметь значения, где происходит abouts в документе#my_id
.Пример скрипки
Это то, что вы хотите?
JQuery
$(document).ready(function() { $('#my_id>div').hide(); $('<a href="#" id="read-more-link">Read More</a>').appendTo('#my_id'); $('#read-more-link').click(function(e) { e.preventDefault(); $(this).fadeOut(); $('#my_id>div').slideToggle(); }); });
HTML
<div id="container"> <div id="my_id"> <p>blabla</p> <div> <p>This is some hidden content</p> <p>This is some more hidden content</p> </div> </p> </div>
Решение 1:
function do_slidedown(element){ $(element).slideDown("slow", function(e){ if($(element).next().length > 0){ do_slidedown($(element).next()); } }); } $(document).ready(function() { $('#my_id ~ p').hide(); $('#my_id').append("<a id='read_more' href='#'>read more</a>") $('#my_id').find("a#read_more").live("click", function(){ $(this).hide(); // for remove link do_slidedown($('#my_id ~ p').first()) }); });
Если вы хотите открыть каждый
<p>
по одному, то используйте следующий код...Решение 2:
$(document).ready(function() { $('#my_id ~ p').hide(); $('#my_id').append("<a class='read_more' href='#'>read more</a>") $("a.read_more").live("click", function(){ $(this).hide() $next_para = $(this).closest("p").next(); if($next_para.next().length > 0) { $next_para.append("<a class='read_more' href='#'>read more</a>") } $next_para.slideDown(); }); });
Перестроить решение: Я думаю, что прыжки из-за автоматического запаса
<p>
, Проверьте со следующим.var the_more = $( '<div id="the_more">' ).hide(); $('DIV#container p').css("margin", "0px").css("padding", "10px 0px"); $('DIV#container p#inbetween ~ p').wrapAll( the_more ); $('<a href="#yje_more">read more</a>').appendTo('DIV#container p#inbetween').click( function(e){ e.preventDefault(); $(this).fadeOut(1000, function() { $(this).remove()} ); $('#the_more').slideToggle(1000); } );
Вау, наконец-то, благодаря вам, ребята, я взломал его! Добавив:
position: relative
Для родительского контейнера прыжки полностью исчезли!
Спасибо всем за вашу помощь и терпение!var the_more = $( '<div id="the_more">' ).hide(); $('DIV#container').css("position", "relative"); $('DIV#container p').css("margin", "0px").css("padding", "10px 0px"); $('DIV#container p#inbetween ~ p').wrapAll( the_more ); $('<a href="#yje_more">read more</a>').appendTo('DIV#container p#inbetween').click( function(e){ e.preventDefault(); $(this).fadeOut(1000, function() { $(this).remove()} ); $('#the_more').slideToggle(1000); } );