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

发布于 2024-10-31 10:24:05 字数 351 浏览 0 评论 0 原文

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

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

$(this).children("div")

不能像这样重写:

$(this + " div")

而不必求助于类似的东西:

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

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

I need help understanding $(this). Is it possible to narrow the focus of "this" within the parentheses or does "this" preclude the use of any other attributes?

For example: I don't understand why this code:

$(this).children("div")

can't be rewritten like this:

$(this + " div")

without having to resort to something like:

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

Also, can you point me to 'this' in the jQuery documentation? It is difficult to use 'this' as a search term for obvious reasons.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

寒江雪… 2024-11-07 10:24:05

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

 $(this + " div")

真正要做的是调用 .toString() "noreferrer">this 连接字符串,导致:

 $("[object Object] div")

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

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


根据评论请求,一些 this 在不同位置的示例:

  • 事件处理程序,例如:$("selector").click(function() {alert(this); }) ;
    • this 指的是触发事件处理程序的 DOM 元素。
  • 在 jQuery 插件中,例如: $.fn.myPlugin = function() {alert(this); });
    • this 是调用/链接插件的 jQuery 对象,例如:$("selector").myPlugin();, this< /code> 是 $("selector") jQuery 对象。

  • 在任何通用函数内,例如: function myFunc() {alert(this); };
    • this 是您所在的上下文,无论是对象还是其他东西,以下是一些示例:
    • $("selector").click(myFunc); - this 是 DOM 元素,如上
    • $("selector").click(function() { myFunc(); }); - this 是全局内容,window
    • myFunc.call(whatThisIs, ​​arg1, arg2); - thiswhatThisIs

this isn't a jQuery "thing", but a basic JavaScript one. It can't be re-written the way you have in examples because it's an object, in particular either a DOM element or a jQuery object (depending on what context you're in). So if you did this:

 $(this + " div")

What you'd really be doing is calling .toString() on this to concatenate the strings, resulting in:

 $("[object Object] div")

....which isn't a valid selector.

As for further reading, I believe this article continues to be one of the best references/resources to learn what this (a context keyword) means.


Per comment requests, some examples of what this is in various places:

  • Event handlers, for example: $("selector").click(function() { alert(this); });
    • this refers to the DOM element the event handler is being triggered on.
  • Inside a jQuery plugin, for example: $.fn.myPlugin = function() { alert(this); });
    • this is the jQuery object the plugin was called/chained on, for example: $("selector").myPlugin();, this is that $("selector") jQuery object.
  • Inside any generic function, for example: function myFunc() { alert(this); };
    • this is the context you're in, whether it be an object or something else, a few examples:
    • $("selector").click(myFunc); - this is the DOM element, like above
    • $("selector").click(function() { myFunc(); }); - this is the global content, window
    • myFunc.call(whatThisIs, arg1, arg2); - this is whatThisIs
雨巷深深 2024-11-07 10:24:05

使用 .find()

$( this ).find( 'div' )

或使用 context参数 jQuery( 选择器, context ) (在内部,它只是调用 find 无论如何...)

$( 'div', this )

Use .find()

$( this ).find( 'div' )

Or use the context parameter to jQuery( selector, context ) (internally, it just calls find anyway...)

$( 'div', this )
柒夜笙歌凉 2024-11-07 10:24:05

this 不是代表 css 选择器的字符串(例如 div#my_id.my_class)。< br>
当将 this 作为 jQuery 函数的参数传递时,它会根据当前元素(this 引用的内容)返回一个 jQuery 对象,因此您不能使用类似 $(this + 选择器)

this is not a string representing a css selector(such as div,#my_id or .my_class).
When passing this as a argument for the jQuery function, it returns a jQuery object based on the current element(what this referes to), so you cannot use something like $(this + selector).

羁〃客ぐ 2024-11-07 10:24:05

你可以看看这个: http://api.jquery.com/each/

基本上 < code>this 是回调引用的 DOM 元素。您不能执行 $(this + " div") 因为您要向元素添加字符串。您首先需要像第三个代码片段中那样获取 id。

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

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

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

You can take a look at this: http://api.jquery.com/each/

Basically this is the DOM element that the callback is referencing. You can't do $(this + " div") because you are adding a string to an element. You first need to get the id like in your third code snippet.

By the way, $(this).children("div") is not the same as $('#'+$(this).attr("id")+" div")

First off, this might not have an ID, in which case the second way won't work at all. And even if it does have an ID, that second code is actualy $(this).find("div"). If you want children only you have to do:

$('#'+$(this).attr("id") + " > div")
感悟人生的甜 2024-11-07 10:24:05

首先,你必须明白什么是this,它取决于上下文。
当你调用 $ 函数时,它将返回一个 jQuery 对象。

$(this).children("div")

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

First, you must to understand what is this, it is depend on an context.
When you call $ function it will return a jQuery object.

$(this).children("div")

It means from specific object, get all children, see the below link:
http://jsfiddle.net/vietean/f2Yrg/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文