jQuery如何应用于每个块

时间:2012-11-19 02:11:35

标签: javascript jquery

我从PHP / MYSQL获得了文本输出,并使用了以下jQuery来限制文本并执行一些显示/隐藏效果。它适用于第一个块,但是如果我通过php循环项目,所有块都被更改为一个相同的内容,有没有办法使jQuery适用于每个块?

function excerpt(str, nwords) {
    var words = str.split(' ');
    words.splice(nwords, words.length - 1);
    return words.join(' ') + '…';
}

var $div = $('.container');
var excerpt = excerpt($div.text(), 30);

$div.data('html', $div.html()).html( excerpt );

$('button').click(function() {
    var isHidden = $(this).text() == 'Show';
    $div.html( isHidden ? $div.data('html') : excerpt);
    $(this).text( isHidden ? 'Hide' : 'Show' );
});​

HTML:

<div class="container">
    Donec vitae mollis leo. Quisque ut metus ac velit porttitor sollicitudin quis mattis purus. Quisque id risus id sem porta gravida eu nec neque. Praesent non odio nibh, vitae tincidunt sapien. Maecenas rutrum mollis mauris, eu condimentum nunc viverra nec. Donec fringilla imperdiet volutpat. Morbi in sem ante. Phasellus libero purus, viverra a aliquam ac, eleifend eu nisl. Etiam quis odio nec quam rhoncus iaculis ac quis velit. Sed ut lacus quis enim tempor ullamcorper. Donec odio ligula, porta et bibendum aliquam, blandit vitae lacus.
        Donec vitae mollis leo. Quisque ut metus ac velit porttitor sollicitudin quis mattis purus. Quisque id risus id sem porta gravida eu nec neque. Praesent non odio nibh, vitae tincidunt sapien. Maecenas rutrum mollis mauris, eu condimentum nunc viverra nec. Donec fringilla imperdiet volutpat. Morbi in sem ante. Phasellus libero purus, viverra a aliquam ac, eleifend eu nisl. Etiam quis odio nec quam rhoncus iaculis ac quis velit. Sed ut lacus quis enim tempor ullamcorper. Donec odio ligula, porta et bibendum aliquam, blandit vitae lacus.
    <div class="myimage">picture</div>
    <div class="myimage">picture</div>
    <div class="myimage">picture</div>
</div>
<button>Show</button>




<div class="container">
  Curabitur sed mauris at eros viverra fringilla in a ipsum. Aliquam erat volutpat. Integer quis arcu mauris. Cras diam dui, porta non egestas in, auctor ornare nunc. Donec quam ligula, vulputate quis sodales ultricies, gravida vitae augue. Ut ut nibh nisi. Phasellus placerat odio sed mauris accumsan tincidunt. Nunc orci eros, posuere sollicitudin posuere eget, condimentum imperdiet mi. Sed ornare felis sit amet lectus viverra at blandit erat aliquam. Sed laoreet ante consequat elit vestibulum commodo. In sed rutrum lorem. Integer sagittis placerat mi, at tristique nunc consectetur sit amet. Quisque nec nulla eget lacus condimentum iaculis eget id neque. Praesent sagittis, elit non porttitor cursus, justo elit lobortis magna, vitae interdum magna arcu et sem.
    <div class="myimage">picture 3</div>
    <div class="myimage">picture 5</div>
    <div class="myimage">picture 6</div>
</div>
<button>Show</button>
​

示例:http://jsfiddle.net/BqesP/

1 个答案:

答案 0 :(得分:1)

问题是您在click事件处理程序中引用了整个容器元素集。因此,只要单击任何按钮,您就会将该函数应用于所有.container元素。这是一个快速修改它来修复它:

function excerpt(str, nwords) {
    var words = str.split(' ');
    words.splice(nwords, words.length - 1);
    return words.join(' ') + '&hellip;';
}

var $div = $('.container');

$div.each(function() {
    var theExcerpt = excerpt($(this).text(), 30);
    $(this).data('html', $(this).html()).html( theExcerpt );
});

$('button').click(function() {
    var isHidden = $(this).text() == 'Show';
    var $div = $(this).prev();
    var theExcerpt = excerpt($div.text(), 30);
    $div.html( isHidden ? $div.data('html') : theExcerpt);
    $(this).text( isHidden ? 'Hide' : 'Show' );
});​

通过在中获取目标容器,您可以确保只影响您想要影响的元素。