jquery只在第一个元素上工作的多个div上切换

时间:2011-09-15 19:50:01

标签: jquery

我已经创建了一个页面,但它只是切换第一个div而另外两个不工作...无法解决原因!提前致谢

var levelopen=false;
$(document).ready(function() {
    $('.contentlevel').hide();
    $('#levelopener').click(function(){
        if(levelopen==false)
        {
            $('#levelopener').html('[less]'); 
            levelopen=true;
        }
        else
        {
            $('#levelopener').html('[more]');
            levelopen=false;
        }
        $(this).next(".contentlevel").slideToggle(100);
        return false;
    });
});

http://jsfiddle.net/q2qxX/4/

7 个答案:

答案 0 :(得分:3)

这是因为你有几个具有相同id(levelopener)的元素,id必须是唯一的。使用levelopener类和选择器.levelopener作为点击事件。

另外,使用$(this)来引用当前被点击进行比较的项目,就像您进行切换一样。

答案 1 :(得分:2)

您不能拥有多个具有相同ID的元素,并且在引用调用该方法的对象时应使用this对象。

http://jsfiddle.net/x8RW6/

var levelopen=false;
$(document).ready(function() {
$('.contentlevel').hide();
$('.levelopener').click(function(){
    if(levelopen==false)
        {
        $(this).html('[-]'); 
        levelopen=true;
    }
    else
    {
        $(this).html('[+]');
        levelopen=false;
    }
        $(this).next(".contentlevel").slideToggle(100);
        return false;
});
});

EDIT

经过一番考虑后,我确定该功能只需要进行一些其他调整。 :P

var levelopen=false;
$(document).ready(function() {
    $('.contentlevel').hide();
    $('.levelopener').click(function(){
        if($(this).next(".contentlevel").is(":visible"))
            $(this).html('[+]'); 
        else
            $(this).html('[-]');

        $(this).next(".contentlevel").slideToggle(100);
        return false;
    });
});

答案 2 :(得分:1)

在您的HTML中,您的所有链接都具有相同的ID -pevelopener HTML ID应该是唯一的

答案 3 :(得分:0)

您的HTML不正确ID必须在页面中的所有元素中都是唯一的。

试试这个......这是一个使用常见类名而不是id

的修改过的小提琴

http://jsfiddle.net/q2qxX/10/

答案 4 :(得分:0)

id必须是唯一的,因此您的选择器只会抓取第一个。将您的id更改为类并在jQuery中使用类选择器。

$('.levelopener').click(function(){

答案 5 :(得分:0)

这是因为您有多个具有相同ID的a个标签。将它们切换到类,它可以很好地工作。

http://jsfiddle.net/q2qxX/7/

根据评论更新了代码,以便在点击功能中使用this

答案 6 :(得分:0)

你不能在一个html页面中拥有相同的ID。