0

私は、jQueryを使用してコンテンツのごく一部を表示し、ユーザーがコンテンツをより多く読んだり、より少なく読んだりできるようにするこの優れたスクリプトを持っています。これが私の現在のフィドルです:http ://jsfiddle.net/Tqwdh/1/

概要:画像をクリックすると、追加のテキストが表示される必要があります。

このスクリプトを更新して、ユーザーが関連する画像をクリックできるようにし、より多くのテキストを表示できるようにする方法を知りたいです(テキストリンクを所定の位置に保持します)。

誰かが私にこれを達成する方法を教えてもらえますか?

これが私のHTMLの例です:

<article id="post-5" >

            <div class="more-less">    
                <div class="more-block">
                    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed diam purus, lacinia eget placerat sit amet, bibendum nec nisl. Curabitur a mattis ipsum. Praesent quis nisi in purus malesuada rhoncus. Pellentesque ut quam eget libero congue lobortis. Nunc sed quam ac erat lobortis eleifend. Donec elementum sodales cursus. Aliquam porttitor massa nisi, in laoreet turpis. Sed consequat condimentum lorem ut dignissim. Sed hendrerit mauris ut massa fermentum laoreet. Pellentesque a leo vitae enim dictum lobortis. Praesent commodo feugiat velit iaculis malesuada.</p>
                    <p>Phasellus id elit ac lacus faucibus ullamcorper. Etiam ullamcorper pretium tellus, ut pharetra ante pulvinar vel. Sed neque diam, semper vel rhoncus non, congue ut sapien. Integer a mi eget libero elementum lobortis. Donec hendrerit egestas ligula sit amet eleifend. Curabitur pharetra venenatis tempor. Quisque pulvinar malesuada justo, ut euismod arcu pharetra vitae. Cras lobortis, ligula id euismod euismod, ipsum risus varius urna, faucibus gravida lectus mi nec nulla. Fusce eleifend fringilla nibh ut vulputate. Vivamus sagittis leo metus. Etiam facilisis convallis lacus adipiscing hendrerit. Duis ultricies euismod libero, nec blandit est semper a. Phasellus sit amet justo sed quam elementum lobortis. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
                </div>
            </div>

            <p>
                <a href="#" title="News Item 1"><img src="http://placehold.it/300x187" alt="News Item 1" width="300" height="187" /></a>
            </p>            

        </article><!-- #post-## -->

と私のjQuery

$(function(){
        // The height of the content block when it's not expanded
        var adjustheight = 130;
        // The "more" link text
        var moreText = "Click to read more...";
        // The "less" link text
        var lessText = "Click to read less...";
        // Sets the .more-block div to the specified height and hides any content that overflows
        $(".more-less .more-block").css('height', adjustheight).css('overflow', 'hidden');
        // The section added to the bottom of the "more-less" div
        $(".more-less").append('<p style="display:block;margin-top:8px"><a href="#" class="adjust"></a></p>');
        $("a.adjust").text(moreText);
        $(".adjust").toggle(function() {
                $(this).parents("div:first").find(".more-block").css('height', 'auto').css('overflow', 'visible');
                // Hide the [...] when expanded
                $(this).parents("div:first").find("p.continued").css('display', 'none');
                $(this).text(lessText);
            }, function() {
                $(this).parents("div:first").find(".more-block").css('height', adjustheight).css('overflow', 'hidden');
                $(this).parents("div:first").find("p.continued").css('display', 'block');
                $(this).text(moreText);
        });
        });

ありがとうございました :-)

4

4 に答える 4

2

次のようにクリックハンドラーをimgに追加できます: DEMO

$(function(){
    $('img').click(function(){
        $(this).closest('article').find('.adjust').click();
    });
});​
于 2012-12-13T14:20:06.210 に答える
1

複数のイベントソースがあるため、ロジックをtoggleハンドラーから独自の実装に移動する必要があります。

<article id="post-5" >
    <div class="more-less">    
        <div class="more-block">…&lt;/div>
    </div>
    <p>
         <a href="#post-5" class="adjust" title="News Item 1">…&lt;/a>
    </p>            
</article>
$(function(){
    var adjustheight = 130; // The height of the content block when it's not expanded
    var texts = {
        more: "Click to read more…",
        less: "Click to read less…"
    };
    $("article").each(function() {
        var block = $(".more-block", this).css({height:adjustheight, overflow:'hidden'}),
            cont = $("p.continue", this),
            toggle = $('<a href="#'+this.id+'" class="adjust">').text(texts.more),
            open = false;
        $(".more-less", this).append($('<p style="display:block;margin-top:8px">').append(link));
        $("a.adjust", this).click(function() {
            open = !open;
            block.css("height", open ? "auto" : adjustheight);
            link.text(texts[open ? "less" : "more"]);
            cont[open ? "show" : "hide"]();
        }
    });
});
于 2012-12-13T14:27:47.720 に答える
1

「クリックして詳細を読む」要素と同じ動作を画像要素に追加するだけです。

このようにトグルハンドラーを設定すると、次のようになります。

$(".adjust").toggle(function() {
        $(this).parents("div:first").find(".more-block").css('height', 'auto').css('overflow', 'visible');
        // Hide the [...] when expanded
        $(this).parents("div:first").find("p.continued").css('display', 'none');
        $(this).text(lessText);
    }, function() {
        $(this).parents("div:first").find(".more-block").css('height', adjustheight).css('overflow', 'hidden');
        $(this).parents("div:first").find("p.continued").css('display', 'block');
        $(this).text(moreText);
    });

次の例のように、 jQueryのマルチセレクターを使用して画像要素も選択します。

$(".adjust, #img1, #img2").toggle(function() {
        $(this).parents("div:first").find(".more-block").css('height', 'auto').css('overflow', 'visible');
        // Hide the [...] when expanded
        $(this).parents("div:first").find("p.continued").css('display', 'none');
        $(this).text(lessText);
    }, function() {
        $(this).parents("div:first").find(".more-block").css('height', adjustheight).css('overflow', 'hidden');
        $(this).parents("div:first").find("p.continued").css('display', 'block');
        $(this).text(moreText);
    });

デモ

それが役に立てば幸い。

于 2012-12-13T14:37:02.473 に答える
0

 var maxLength = 50;
    $('.N_DESC').each( function (e) { 
        const thisVal = $(this).text();
        const thisLength = $.trim(thisVal).length;
        const noticeStr = thisVal.substring(0, maxLength);
        const removedStr = thisVal.substring(maxLength, thisLength);
        if(thisLength > maxLength){
            $(this).empty().html(noticeStr);
            $(this).append('<span class="more-text">'+ removedStr +'</span>');
            $(this).append(`<a href="javascript:void(0);" class="read-more" style="padding-left: 8px;">Read More..</a>`);
        }
    }); 
    $(document).on('click', '.read-more', function (e) { 
        $(this).closest('span').find('.more-text').show();
        $(this).addClass('read-less');
        $(this).removeClass('read-more');
        $(this).html('Read Less..');
    });
    $(document).on('click', '.read-less', function (e) { 
        $(this).closest('span').find('.more-text').hide();
        $(this).addClass('read-more');
        $(this).removeClass('read-less');
        $(this).html('Read More..');
    });
   .N_DESC .more-text{
        display: none;
    }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<span class="N_DESC">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas porttitor congue massa. Fusce posuere, magna sed pulvinar ultricies, purus lectus malesuada libero, sit amet commodo magna eros quis urna. Nunc viverra imperdiet enim. Fusce est. Vivamus a tellus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin pharetra nonummy pede. Mauris et orci. Aenean nec lorem. In porttitor.</span>
<br>
<span class="N_DESC">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas porttitor congue massa. Fusce posuere, magna sed pulvinar ultricies, purus lectus malesuada libero, sit amet commodo magna eros quis urna. Nunc viverra imperdiet enim.</span>
<br>
<span class="N_DESC">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas porttitor congue massa. Fusce posuere, magna sed pulvinar ultricies, purus lectus malesuada libero</span>

于 2022-01-09T08:50:09.867 に答える