2012-01-15 3 views
2

Моей разметка выглядит следующим образом:jquery, чтобы изменить html-порядок элементов div?

<ul class="menu collapsible"> 
    <li class='expand sectionTitle home'> 
     <a class='clicker' href='#'>Home</a> 
     <ul class='acitem'> 
      <li class="section">stuff goes here 
     </ul> 
    </li> 

    <li class='expand sectionTitle section1'> 
     <a class='clicker' href='#'>Section 1</a> 
     <ul class='acitem'> 
      <li class="section">stuff goes here 
     </ul> 
    </li> 

    <li class='expand sectionTitle section2'> 
     <a class='clicker' href='#'>Section 2</a> 
     <ul class='acitem'> 
      <li class="section">stuff goes here 
     </ul> 
    </li> 
</ul> 

Я хотел бы добавить в сценарий JQuery (см ниже), который обрабатывает Accordian поведения так, что, когда элемент «зазывала» нажат, его родительский DIV скользит вверх во вторую позицию. Я всегда хочу, чтобы «Home» div находился сверху, но я хочу, чтобы div был активен, чтобы быть расширенным во 2-й позиции.

Вот JQuery, который управляет Accordian меню, расположенные в:

jQuery.fn.initMenu = function() { 
    return this.each(function(){ 
     var theMenu = $(this).get(0); 
     $('.acitem', this).hide(); 
     $('li.expand > .acitem', this).show(); 
     $('li.expand > .acitem', this).prev().addClass('active'); 
     $('li a', this).click(
      function() { 
       var theElement = $(this).next(); 
       var parent = this.parentNode.parentNode; 
       if($(parent).hasClass('noaccordion')) { 
        $(theElement).slideToggle('normal', function() { 
         if ($(this).is(':visible')) { 
          $(this).prev().addClass('active'); 
         } 
         else { 
          $(this).prev().removeClass('active'); 
         }  
        }); 
        return false; 
       } 
       else { 
        if(theElement.hasClass('acitem') && theElement.is(':visible')) { 
         if($(parent).hasClass('collapsible')) { 
          $('.acitem:visible', parent).first().slideUp('normal', 
          function() { 
           $('.acitem:visible', parent).first().prev().removeClass('active'); 
          } 
         ); 
        } 
        return false; 
       } 
       if(theElement.hasClass('acitem') && !theElement.is(':visible')) {       
        $('.acitem:visible', parent).first().slideUp('normal', function() { 
         $(this).prev().removeClass('active'); 
        }); 
        theElement.slideDown('normal', function() { 
         $(this).prev().addClass('active'); 
        }); 
        return false; 
       } 
      } 
     } 
    ); 
}); 
}; 

$(document).ready(function() {$('.menu').initMenu();}); 

ответ

5

как это?

http://jsfiddle.net/hPZs2/

добавил

var homeCheckTmp; 

после вашего объявления переменных вблизи верхней и

homeCheckTmp = theElement.closest('li.expand'); 
if(!homeCheckTmp.is("li.home")) { 
    homeCheckTmp.insertAfter(homeCheckTmp.siblings('.home')); 
} 

перед тем переместив элемент вниз.

+0

+1 Работает очарование! Спасибо, Flo. –

Смежные вопросы