关键字“这个”问题在ajax函数中使用


Keyword `this` problem with using in ajax function

这是一些疯狂的jquery代码。它要做的是到一个PHP文件中获取某种结果然后向下滑动结果如果结果已经在那里了那就往下滑动

$('#compatibility h2').click(function(){
        var clicked = $(this);
        if($(this).hasClass('collapsed'))
        {
            $(clicked).removeClass('collapsed');
            if($($(this)[0].nextSibling).is('ul'))
            {
                $(this).next().slideToggle();
            }
            else
            {
            $.get("getproducts.php", {cid: $(this).attr('id'), did: $("#deviceId").val()},
                  function(data)
                  {   
                    $(clicked).after(data).next().slideToggle(); //adds a <ul> <li> </li> </ul>  
                  });
            }
        }
        else
        {
            $(this).addClass('collapsed');  
            $(this).next().slideToggle();
        }
        //$(this).css('margin','4px 0 7px');
});

现在我的问题有点晦涩,但我想知道为什么当我用关键字this替换点击时,代码不会在点击h2后插入数据。另外,我想知道我是否在用jquery的最佳方式做到这一点。

你为什么要这样做?var clicked = '#'+$(this).attr('id'); ?

这个应该可以工作:

var clicked = $(this);

乍一看,我认为使用"this"将无处不在,除了在$.get(…)中。我有时使用一个技巧来绕过回调和"this"的多个版本,就是在类或函数的顶部添加以下代码:

var me = this;

那么我就用$(me)代替$(this)

问题在第10行左右,他说:

$(clicked).after(data).next().slideToggle(); //adds a <ul> <li> </li> </ul>  

如果您将clicked替换为this,它将停止工作:this将指向$.get的响应,而不是任何DOM元素。

第2行和第3行对我来说看起来非常错误,如果你正在做的就是我认为你正在做的,那么你正在做的就是建立一个字符串'#' + id_of_clicked_element,然后试图运行jQuery操作。那是行不通的!这也是不必要的。

只要if ($(this).hasClass ('collapsed'))就可以了。