Jquery“$(this)”仅选择第一个匹配的元素

时间:2014-04-25 09:29:51

标签: jquery ajax

请考虑以下代码:

$(".xpand").click(function()
{
     var target = $(this).parent().parent().find(".msg");

     target.html("loading...");

     $.get(src, function(data)
     {
         target.html(data);
         $(this).addClass("rotated");
     }).error(function()
     {
         target.html("<b>Error in loading contents. Try again.</b>");
     });
 });

正在发生的事情是,在ajax成功之后,只有当点击的“.xpand”是其他“.xpand”中的第一个时,“旋转”类才被添加到“.xpand”。 如果我选择单击第二个,第三个或最后一个,ajax仍会处理,但不会添加“旋转”类。

我在这里做错了什么?

感谢那些愿意回答的人:)

2 个答案:

答案 0 :(得分:3)

您需要将$(this)存储在另一个变量中,才能在$.get()方法中访问它:

$(".xpand").click(function () {
    var target = $(this).parent().parent().find(".msg"),
        that = $(this);

    target.html("loading...");

    $.get(src, function (data) {
        target.html(data);
        that.addClass("rotated");
    }).error(function () {
        target.html("<b>Error in loading contents. Try again.</b>");
    });
});

答案 1 :(得分:0)

   $(".xpand").click(function () {
       var target = $(this).parent().parent().find(".msg");

       target.html("loading...");

       var inside = this;
       $.get(src, function (data) {
           target.html(data);
           $(inside).addClass("rotated");
       }).error(function () {
           target.html("<b>Error in loading contents. Try again.</b>");
       });
   });

&#39;这&#39;在您使用它的上下文中,指的是请求而不是发出事件的事物。要解决此问题,请在发出请求之前存储此副本。