2012-05-22 20 views
2

我真的坚持了我的代码,它的工作,除了一件事很好,我需要关闭所有打开的div,当我点击其他分区打开,这里是我的代码:jQuery的拨动一个DIV当其他激活

function readFaq() { 

$('.find-faq-inner h3').prepend('<span id="spanfaq" class="faq-open"></span>'); 

$('.find-faq-inner h3').each(function() { 
    var tis = $(this), state = false; 
    var answer = tis.next('div').hide().css('height', 'auto').slideUp(); 

    tis.click(function() { 
     state = !state; 
     answer.slideToggle(state); 
     tis.toggleClass('active', state); 

     if (state == true) { 
      tis.find('#spanfaq').removeClass('faq-open'); 
      tis.find('#spanfaq').addClass('faq-close'); 
     } 
     else { 
      tis.find('#spanfaq').removeClass('faq-close'); 
      tis.find('#spanfaq').addClass('faq-open'); 
     } 

    }); 
    }); 
} 


<div class="find-faq-inner"> 
    <div class="text"> 
    <h3>FAQ1</h3> 
    <div> 
    text of faq 
    </div> 
    </div> 
</div> 

任何想法将是有益的,感谢

+0

类的DIV的直接子女,被称为该函数的div?我们能否获得更多标记? – mattytommo

+1

此行“var answer = tis.next('div')。hide()。css('height','auto')。slideUp();”一次做太多事情;你应该考虑把它分开。 – frenchie

回答

1
function readFaq() { 

$('.find-faq-inner h3').prepend('<span id="spanfaq" class="faq-open"></span>'); 

$('.find-faq-inner h3').each(function() { 
    var tis = $(this), state = false, answer = tis.next('div').hide().css('height', 'auto').slideUp(); 
    tis.click(function() { 
     state = !state; 

     $('.find-faq-inner .text div').hide();// This will hide all the divs 

     answer.slideToggle(state); 
     tis.toggleClass('active', state); 

     if (state == true) { 
      tis.find('#spanfaq').removeClass('faq-open'); 
      tis.find('#spanfaq').addClass('faq-close'); 
     } 
     else { 
      tis.find('#spanfaq').removeClass('faq-close'); 
      tis.find('#spanfaq').addClass('faq-open'); 
     } 

    }); 
    }); 
} 

在我加入 $('.find-faq-inner .text div').hide();

这将隐藏在所有的div上述功能股利,相应地在你的代码中使用它。

要在更安全,你还可以使用

$('.find-faq-inner .text > div').hide();

它会隐藏只有那些text

+0

工作,感谢您的帮助! – Renaldas