You are a rock star!  I can't thank you enough.


On Jun 20, 1:55 pm, mkmanning <michaell...@gmail.com> wrote:
> A minor refactor then:
>
> $('.main ul').each(function(){
> var $this = $(this), lis = $this.find('li:gt(9)').hide();
>         if(lis.length>0){
>         $this.append($('<li>').text('More').click(function(){
>                 lis.toggle();
>                         $(this).text($(this).text() === 'More' ? 'Less' : 
> 'More');
>                 }));
>         }
>
> });
>
> Hide everything at index 10+, then check the length of the jQuery
> object from that operation. If it's length is greater than 0, go ahead
> and add the 'More' link.
>
> On Jun 20, 10:11 am, bombaru <bomb...@gmail.com> wrote:
>
> > One question with this approach... how would I implement this only on
> > groups that contain more than 10 LI's?  Right now it's getting added
> > to every LI group.  Groups with less than 10 LI's are also getting the
> > <more> link appended but there is obviously nothing to toggle.
>
> > Thanks again.  This approach is a lot cleaner that what I had
> > concocted and work with jQuery 1.3.2.
>
> > On Jun 19, 9:16 pm, bombaru <bomb...@gmail.com> wrote:
>
> > > Thanks mkmanning!!!  I'll give this a try tomorrow and let you know.
> > > Looking at it though... I'm pretty confident it will do the trick.
> > > It's amazing how much more efficiently the original chunk of code can
> > > be written and it still makes perfect sense (actually it's clearer).
>
> > > On Jun 19, 7:36 pm, Karl Swedberg <k...@englishrules.com> wrote:
>
> > > > Ah, I see. Helps to be able to see the HTML.
>
> > > > Let us know if mkmanning's approach doesn't do the trick.
>
> > > > --Karl
>
> > > > ____________
> > > > Karl Swedbergwww.englishrules.comwww.learningjquery.com
>
> > > > On Jun 19, 2009, at 5:56 PM, bombaru wrote:
>
> > > > > Thanks Karl... I'm not familiar with slice() but will definitely read
> > > > > up on it.  The problem I'm having with this approach is that every LI
> > > > > after the 10th one is being hidden.
>
> > > > > Here's an example of what the HTML looks like without any JS applied
> > > > > to it:
>
> > > > > <ul id="narrow-search">
> > > > >  <li class="main">
> > > > >  Category
> > > > >    <ul>
> > > > >      <li>Category Name</li>
> > > > >      <li>Category Name</li>
> > > > >      <li>Category Name</li>
> > > > >      <li>Category Name</li>
> > > > >      <li>Category Name</li>
> > > > >      <li>Category Name</li>
> > > > >      <li>Category Name</li>
> > > > >      <li>Category Name</li>
> > > > >      <li>Category Name</li>
> > > > >      <li>Category Name</li>
> > > > >      <li>Category Name</li>
> > > > >      <li>Category Name</li>
> > > > >      <li>Category Name</li>
> > > > >      <li>Category Name</li>
> > > > >      <li>Category Name</li>
> > > > >      <li>Category Name</li>
> > > > >      <li>Category Name</li>
> > > > >      <li>Category Name</li>
> > > > >    </ul>
> > > > >  </li>
> > > > >  <li class="main">
> > > > >  Brand
> > > > >    <ul>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >    </ul>
> > > > >  </li>
> > > > >  <li class="main">etc...</li>
> > > > > </ul>
>
> > > > > The HTML after your approach looks something like this:
>
> > > > > <ul id="narrow-search">
> > > > >     <li class="main">
> > > > >      Category
> > > > >      <ul>
> > > > >            <li>Category Name</li>
> > > > >        <li>Category Name</li>
> > > > >        <li>Category Name</li>
> > > > >        <li>Category Name</li>
> > > > >        <li>Category Name</li>
> > > > >        <li>Category Name</li>
> > > > >        <li>Category Name</li>
> > > > >        <li>Category Name</li>
> > > > >        <li>Category Name</li>
> > > > >        <li>Category Name</li>
> > > > >      </ul>
> > > > >      <ul style="display:none;">
> > > > >        <li>Category Name</li>
> > > > >        <li>Category Name</li>
> > > > >        <li>Category Name</li>
> > > > >        <li>Category Name</li>
> > > > >        <li>Category Name</li>
> > > > >        <li>Category Name</li>
> > > > >        <li>Category Name</li>
> > > > >        <li>Category Name</li>
> > > > >      </ul>
> > > > >      <a href="#">more</a>
> > > > >  </li>
> > > > >  <li class="main">
> > > > >  Brand
> > > > >  <ul/>
> > > > >    <ul style="display:none;">
> > > > >            <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >      <li>Brand Name</li>
> > > > >    </ul>
> > > > >    <a href="#">more</a>
> > > > >  </li>
> > > > >  <li class="main">etc...</li>
> > > > > </ul>
>
> > > > > Something is getting screwed up.  The first group looks good (but the
> > > > > toggle does not work).  From then on, the following LI groups are all
> > > > > hidden and there's a strange <ul /> tag being inserted into the mix.
>
> > > > > Any ideas?
>
> > > > > On Jun 19, 5:18 pm, Karl Swedberg <k...@englishrules.com> wrote:
> > > > >> I'd probably use .slice().
>
> > > > >> Something like this should work:
>
> > > > >>    $(document).ready(function() {
> > > > >>      var $list = $('.main ul'),
> > > > >>          $items = $list.find('li'),
> > > > >>          $moreLink = $('<a href="#">more</a>');
>
> > > > >>      if ($items.length > 10) {
> > > > >>        $moreItems = $('<ul></ul>').append($items.slice(10)).hide();
> > > > >>        $list.after($moreLink).after($moreItems);
> > > > >>        $moreLink.click(function() {
> > > > >>          $(this).text($(this).text() == 'more' ? 'less' : 'more');
> > > > >>          $moreItems.slideToggle();
> > > > >>          return false;
> > > > >>        });
> > > > >>      }
> > > > >>    });
>
> > > > >> --Karl
>
> > > > >> ____________
> > > > >> Karl Swedbergwww.englishrules.comwww.learningjquery.com
>
> > > > >> On Jun 19, 2009, at 4:54 PM, bombaru wrote:
>
> > > > >>> There has got to be a better way to write this?  Basically, I'm
> > > > >>> returning a bunch of list item and after the 10th one, setting the
> > > > >>> rest to display:none and adding a <more> link.  Clicking on the  
> > > > >>> <more>
> > > > >>> link removes the display:none and adds a <less> link at the bottom.
>
> > > > >>> I think jQuery 1.3.2 is having some trouble with the nth-child
> > > > >>> approach.  Can someone point me in the right direction on how to
> > > > >>> improve this?
>
> > > > >>> Thanks.
>
> > > > >>> $(document).ready(function() {
> > > > >>>            $('.main ul').each(function() {
> > > > >>>                $('li', this).each(function(i) {
> > > > >>>                    if (i > 9) {
> > > > >>>                        if (i == 10) {
> > > > >>>                            $(this).parent().append('<li id=
> > > > >>> \"toggleon
> > > > >>> \" class=\"toggle\"><a href=\"#\">more >></a></li><li id=
> > > > >>> \"toggleoff\"
> > > > >>> class=\"toggle\" style=\"display:none\"><a href=\"#\"><< less</a></
> > > > >>> li>');
> > > > >>>                        }
> > > > >>>                        $(this).hide();
> > > > >>>                    }
> > > > >>>                });
> > > > >>>            });
>
> > > > >>>            $('li.toggle').click(function() {
> > > > >>>                $(this).parent().find('li:nth-child(10) ~ li').toggle
> > > > >>> ();
> > > > >>>                $(this).find('#toggleon').toggle();
> > > > >>>                $(this).find('#toggleoff').toggle();
> > > > >>>                return false;
> > > > >>>            });
> > > > >>>        });

Reply via email to