使这个slideToggle功能更清洁

时间:2012-07-26 19:47:21

标签: jquery slidetoggle

我提前感谢你阅读我的问题。

我是任何编程语言的新手。 我写了一些jQuery函数,每个div框打开并在单击时关闭。

我的想法是编写代码,只要div打开所有其他div关闭就会运行。 它非常实用,但我的代码现在太乱了。 我想知道是否有人可以给我一些关于清理这个烂摊子的建议。

$(document).ready(function(){
var open_footer = 'click to hide';
var close_footer = 'click to see detail';

$('.text_area').hide();
$('.text_area>img').remove(); 
$('.click_me:eq(0)').click(function(){

    $(this).next('.text_area').slideToggle(100, function(){
    if($(this).is(':visible')){
    $('.text_area:eq(1)').hide(); $('.text_area:eq(2)').hide()
       $('.text_area:eq(3)').hide();
    $('#article_footer1').text(open_footer);
    $('#article_footer2').text(close_footer);

    $('#article_footer3').text(close_footer);$('#article_footer4').text(close_footer);
    $('.text_area:eq(0)').append('<img class="text_area_img" src="Hicks_Nat.jpg" "no-repeat"/>');
    $('.text_area:eq(1)>img').remove();$('.text_area:eq(2)>img').remove();$('.text_area:eq(3)>img').remove();
    } else if ($(this).is(':hidden')){

        $('#article_footer1').text(close_footer);
        $('.text_area:>img').remove();
        }
    });
});

这是一个代码块,我基本上还有3个类似的块。 无论如何我可以简化这个吗?

编辑/这是CSS

 .click_me{
display: block;
display: none;

padding:10px;
width: 550px;
float:left;
margin-top:15px;
margin-left: 25px;
height: 75px;
overflow: hidden;
position: relative;
background:radial-gradient(center,circle,#EEEEE0 50%, white 80%);
opacity: 1;
border-radius:10px;
border: 1px solid silver;
-moz-border-radius:10px;
-webkit-border-radius:10px;
-moz-box-shadow:#999 2px 0px 3px;
box-shadow:rgb(110,110,110) 6px 6px 4px;
 }
.click_me:hover{
background: #DCDCDC;
 }
 .text_area{
font-family:arial;
font-weight: bold;
font-size: 14px;
text-align:left;
background:white;
border: 1px solid silver;
border-radius: 10px;
box-shadow:#999 2px 0px 3px;
margin-top:10px;
padding: 10px;
float:right;
max-height: 600px;
width: 500px;
overflow: auto;

}

1 个答案:

答案 0 :(得分:0)

清理代码的方法主要是使用CSS。因为我不知道你的代码是什么样的,所以我做了一些猜测。我没有完成这个,但是要点就在那里,应该让你开始缩短/清理代码:

CSS

.hidden {
    display: none;
}

.openText:after {
    content: "click to hide";
}

.closeText:after {
    content: "click to see detail";
}

HTML

<div class="section hidden" style="border: 2px solid orange; padding: 3px;">
    <text-area class="text_area">First</text-area>
    <p>Some more text here or images or whatever</p>
</div>
<footer class="click_me article_footer"></footer>
<div class="section hidden" style="border: 2px solid orange; padding: 3px;">
    <text-area class="text_area">Second</text-area>
    <p>Some more text here for section 2</p>
</div>
<footer class="click_me article_footer"></footer>
<div class="section hidden" style="border: 2px solid orange; padding: 3px;">
    <text-area class="text_area">Third</text-area>
    <p>Section 3 additional stuff.</p>
</div>
<footer class="click_me article_footer"></footer>

JAVASCRIPT:

$(document).ready(function(){
    function myToggle(ele) {
        $(ele).prev('div').toggleClass('hidden');
        $(ele).toggleClass('openText closeText');
    };

    $('.article_footer').addClass('closeText');
    $('.click_me').click(function() {
        var triggerElem = this;
        $('.openText').each(function() {
            if (this != triggerElem) {
                myToggle(this);
            }
        });
        myToggle(this);
    });
});