记住$(this)是什么

时间:2011-02-01 15:42:55

标签: javascript jquery

我有以下脚本将jquery制作对象的颜色更改为蓝色:

$(".objects_list").live('click', function(event)
{
    $(this).css("color", "blue");
});

我怎么记得$(this)是什么,所以我可以再次改变颜色,但是从不同的功能或不同对象的事件中改变颜色?

8 个答案:

答案 0 :(得分:6)

您可以使用jQuery的data()方法将信息与文档本身相关联,而不是全局变量:

$(".objects_list").live('click', function(event) {
    $(this).css("color", "blue");
    $(document).data("yourObjectKey", $(this));
});

然后您可以在以后轻松获取该信息:

$("otherSelector").click(function() {
    var yourObject = $(document).data("yourObjectKey");
    if (yourObject != null) {
        yourObject.css("color", "red");
    }
});

编辑:如果在两个事件之间销毁并重新创建元素,则该方法将无效。在这种情况下,您可以存储元素的id而不是对元素本身的引用:

$(".objects_list").live('click', function(event) {
    $(this).css("color", "blue");
    $(document).data("yourObjectKey", this.id);
});

然后:

$("otherSelector").click(function() {
    var yourObjectId = $(document).data("yourObjectKey");
    if (yourObjectId != null) {
        $("#" + yourObjectId).css("color", "red");
    }
});

答案 1 :(得分:2)

将超出范围的变量设置为对象。

var thisObj;
$(".objects_list").live('click', function(event)
{
    thisObj = $(this);
    $(this).css("color", "blue");
});

答案 2 :(得分:1)

var lastObj = null;
$(".objects_list").live('click', function(event)
{
    $(this).css("color", "blue");
    lastObj = $(this);
});

some_other_function()
{
    if ( lastObj != null )
        lastObj.css("color", "red");
}

答案 3 :(得分:1)

您可以添加一个id属性来指示“已点击”项,然后其他功能可以选择该ID。不需要任何类型的全局变量:

$(".objects_list").live('click', function(event)
{ 
    $(this).css("color", "blue");
    $('#objects_list_clicked').removeAttr("id");
    $(this).attr("id", "objects_list_clicked");
});

答案 4 :(得分:0)

你可以将一个事件监听器附加到“$(this)”来监听何时应该改变颜色?

答案 5 :(得分:0)

不是最干净的解决方案,但您可以将其分配给全局变量:

myElement = $(this);

答案 6 :(得分:0)

一个选项就是将$(this)保存在变量中:

var saved;
$(".objects_list").live('click', function(event)
{
    $(this).css("color", "blue");
    saved = $(this);
});

答案 7 :(得分:0)

尝试不同:

$(".objects_list").live('click', function(event)
{
    var $this = $(this);
    $(".objects_list").removeAttr('selected');
    $this.attr('selected','selected');
        $this.css("color", "blue");
});

现在您的选择不会存储为javascript变量,而是存储在DOM中。 您可以随时使用以下代码

从任何地方更改设置
if($(".objects_list").attr('selected').length != 0){
    var selectedTab = $(".objects_list").attr('selected');
}