I got texts output from PHP/MYSQL, and I used following jQuery to limit the text and do some show/hide effects. It works fine for the first block, but all blocks are changed to one same content if I loop the items by php, is there a way to make the jQuery applies to each block?
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>
SAMPLE: http://jsfiddle.net/BqesP/
the issue is that you are referencing the entire set of container elements inside your click event handler. So any time any button is clicked, you are applying the function to all
.containerelements. here’s a quick change to fix it:by getting the target container inside the function, you can make sure you only effect the element you want to be effected.