JQuery $(this)选择器功能和限制

时间:2011-04-10 10:45:38

标签: jquery selector this

我需要帮助理解$(this)。是否有可能在括号内缩小“this”的焦点,或者“this”是否排除使用任何其他属性?

例如:我不明白为什么这段代码:

$(this).children("div")

无法像这样重写:

$(this +" div")

无需诉诸:

$('#'+$(this).attr("id")+" div")

另外,你能在JQuery文档中指出'this'吗?由于显而易见的原因,很难将“this”用作搜索词。

5 个答案:

答案 0 :(得分:17)

this不是jQuery“的东西”,而是basic JavaScript one。它不能像你在示例中那样重写,因为它是一个对象,特别是DOM元素或jQuery对象(取决于你所处的上下文)。所以如果你这样做了:

 $(this + " div")

真正正在做的是在.toString()上调用this来连接字符串,从而产生:

 $("[object Object] div")

....这不是一个有效的选择器。

至于进一步阅读,我相信this article仍然是了解this(上下文关键字)含义的最佳参考/资源之一。


根据评论请求,this在不同地方的一些例子:

  • 事件处理程序,例如:$("selector").click(function() { alert(this); });
    • this指的是触发事件处理程序的DOM元素。
  • 在jQuery插件中,例如:$.fn.myPlugin = function() { alert(this); });
    • this是插件被调用/链接的jQuery对象,例如:$("selector").myPlugin();this$("selector") jQuery对象。
  • 在任何通用函数中,例如:function myFunc() { alert(this); };
    • this是您所处的背景,无论是对象还是其他内容,只有几个示例:
    • $("selector").click(myFunc); - this是DOM元素,如上所述
    • $("selector").click(function() { myFunc(); }); - this是全球内容window
    • myFunc.call(whatThisIs, arg1, arg2); - thiswhatThisIs

答案 1 :(得分:6)

使用.find()

$( this ).find( 'div' )

或者使用context参数jQuery( selector, context )(在内部,它只是调用find ...)

$( 'div', this )

答案 2 :(得分:0)

this不是表示css选择器的字符串(例如div#my_id.my_class)。
当传递this作为jQuery函数的参数时,它会返回一个基于当前元素的jQuery对象(这是对它的引用),所以你不能使用像$(this + selector)这样的东西。

答案 3 :(得分:0)

您可以看一下:http://api.jquery.com/each/

基本上this是回调引用的DOM元素。您无法执行$(this + " div"),因为您正在向元素添加字符串。您首先需要在第三个代码段中获取ID。

顺便说一下,$(this).children("div")$('#'+$(this).attr("id")+" div")

不同

首先,this可能没有ID,在这种情况下,第二种方式根本不起作用。即使它确实有ID,第二个代码也是实际的$(this).find("div")。如果你只想要孩子,你必须这样做:

$('#'+$(this).attr("id") + " > div")

答案 4 :(得分:0)

首先,您必须了解什么是,这取决于上下文。 当你调用$ function时,它将返回一个jQuery对象。

$(this).children("div")

这意味着从特定对象获取所有孩子,请参阅以下链接: http://jsfiddle.net/vietean/f2Yrg/