如何独立调用show / hide功能

时间:2012-07-15 07:40:16

标签: jquery

嗨,我得到了帮助,最终我得到了jquery show / hide功能,效果很好。 但是,当有几个评论组时,我花了一整天的时间来完成下一步。

这里的代码

var toggle = false;
$(function() {
    $(document).on('click', 'a.comments', function(e) {
        var $this = $(this);
        $('.toggleComments').toggle(1000,function() {
            if(!toggle) {
                $this.text('Hide Comments');
                toggle = !toggle;
            }else {
                $this.text('Show Comments');
                toggle = !toggle;
            }
        });
        e.preventDefault();
    });
});

<a href="#" class="comments">Show Comments</a><br />
<div class="toggleComments" style="display:none;">This is #comment1 <br />This is #comment2 <br /></div>
<a href="#" class="comments">Show Comments</a><br />
<div class="toggleComments" style="display:none;">This is #comment1 <br />This is #comment2 <br /></div>
<a href="#" class="comments">Show Comments</a><br />
<div class="toggleComments" style="display:none;">This is #comment1 <br />This is #comment2 <br /></div>
<a href="#" class="comments">Show Comments</a><br />
<div class="toggleComments" style="display:none;">This is #comment1 <br />This is #comment2 <br /></div>

有4个评论组,但由于html DOM相同,所以点击它们时它们无法独立工作。

你能告诉你如何处理这种情况管理他们独立显示/隐藏而不必为每个评论组分配jquery脚本吗?

3 个答案:

答案 0 :(得分:3)

工作演示 http://jsfiddle.net/ZXNWF/ http://jsfiddle.net/X5ZUU/1/或更改文字:http://jsfiddle.net/Xam9q/

API:http://api.jquery.com/nextAll/

然后使用nextAll始终获取要显示的:first

休息随时随地玩这个演示,希望对此有所帮助。

<强>码

var toggle = false;
$(function() {

    $(document).on('click', 'a.comments', function(e) {
         $('.toggleComments').hide();
        var $this = $(this);
        $(this).nextAll('.toggleComments:first').toggle(1000,function() {
            if(!toggle) {
                $this.text('Hide Comments');
                toggle = !toggle;
            }else {
                $this.text('Show Comments');
                toggle = !toggle;
            }
        });
        e.preventDefault();
    });
});
​

简单

var toggle = false;
$(function() {

    $(document).on('click', 'a.comments', function(e) {
        $('.toggleComments').hide();
        var $this = $(this);
         $('.comments').text('Show Comments');
            $this.text('Hide Comments');
        $(this).nextAll('.toggleComments:first').toggle(1000,function() {    
        });
        e.preventDefault();
    });
});
​

答案 1 :(得分:1)

如果您希望a标签显示正确的文字 - 请使用以下代码:

$(function() {
    $(document).on('click', 'a.comments', function(e) {
        e.preventDefault();
        var $this = $(this);
        $this.next().next().toggle(1000,function() {
            if($this.text()=='Show Comments') {
                $this.text('Hide Comments');
            }else {
                $this.text('Show Comments');
            }
        });

    });
});

(我接受了xdazz的回答并稍微改了一下,因为你不能使用1个变量(toogle)来获得4个链接。) 演示:http://jsfiddle.net/jAMGE/

答案 2 :(得分:0)

试试这个:

var toggle = false;
$(function() {
    $(document).on('click', 'a.comments', function(e) {
        e.preventDefault();
        var $this = $(this);
        // $this.next().next() is the div after the link.
        $this.next().next().toggle(1000,function() {
            if(!toggle) {
                $this.text('Hide Comments');
                toggle = !toggle;
            }else {
                $this.text('Show Comments');
                toggle = !toggle;
            }
        });
    });
});

The DEMO