jQuery element.data()语法。我怎么知道`$(this)`是什么?

时间:2011-01-14 18:33:45

标签: jquery syntax

我有以下jQuery变量:

var confirmbox=$('<div></div>')
        .data({'defaultText': 'This action cannot be reversed. Are you sure you wish to do this?',
               'defaultButtons': {  Yes : function() { $(this).dialog('close');}, 
                                    No  : function() { $(this).dialog('close');}
               }
        });

我想将confirmbox.html()设置为confirmbox.data('defaultText')

confirmbox.html(confirmbox.data('defaultText'));//this works
confirmbox.html($(this).data('defaultText'));//this fails. Why?

同样失败的语法现在可以在这里工作:

confirmbox.dialog({
            autoOpen: false,
            modal: true,
            buttons: $(this).data('defaultButtons'),
            close: function(){
                $(this).html($(this).data('defaultText')); //working here. Why?
                $(this).dialog('option','buttons',$(this).data('defaultButtons'));
            }
        });

我认为我不明白$(this)在特定情境中所指的是什么。我怎么说?

3 个答案:

答案 0 :(得分:2)

就像你说的那样,这完全取决于背景 执行dialog.close()函数时,此对象指向对话框实例,因此$(this)引用jQuery对话框对象。如果您正在执行

confirmbox.html($(this).data('defaultText'));//this fails. Why?

在全球范围内,这并没有那个含义。它指的是document.window对象,而不是你的对话框实例。

答案 1 :(得分:2)

this是对当前上下文对象的引用。在您失败的示例中,this可能是指window对象(或者下一个直接封闭的上下文,如果不是窗口)。例如,如果window有自己附加的defaultText数据,那么您将 传递给.html()

但由于.html()旨在将函数作为参数,因此this将引用confirmbox上下文。试试这样:

confirmbox.html( function(){
  // this now refers to confirmbox
  return $(this).data('defaultText');
});

答案 2 :(得分:1)

confirmbox.dialog中,this指的是confirmbox对象。这就是$(this)工作的原因。

confirmbox.html($(this).data('defaultText'));行中,this没有上下文,只是设置为window

我不太擅长解释事情,但我希望这会有所帮助。