【问题标题】:jQuery $(this) selector function and limitationsjQuery $(this) 选择器功能和限制
【发布时间】:2011-04-10 10:45:37
【问题描述】:

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

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

$(this).children("div")

不能这样改写:

$(this + " div")

无需求助于:

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

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

【问题讨论】:

  • 鉴于这种语言的鸭式打字特性,它应该如何知道您希望如何使用this?您的示例暗示它应该是一个字符串,您可以将内容附加到该字符串。
  • 我曾讨论过包含一个使用泛型函数的完整示例,但决定保持其泛型,希望像尼克这样的人会出现;)

标签: jquery selector this


【解决方案1】:

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

 $(this + " div")

真正要做的是在this 上调用.toString() 来连接字符串,结果是:

 $("[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 很好地解释了你不能这样做的原因
  • 您能否详细说明问题提问者this 是什么以及在大多数与jQuery 使用相关的上下文中它通常指的是什么(即我正在考虑插件、事件处理程序等) ?
  • 虽然你可能会修补对象的.toString 以返回正确的 id...
  • +1 - 一段时间以来一直在寻找这样的答案!我看到很多人使用$(this + 'string') 回答问题——虽然不正确,但它似乎确实有效。知道为什么吗?
【解决方案2】:

使用.find()

$( this ).find( 'div' )

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

$( 'div', this )

【讨论】:

    【解决方案3】:

    this 不是表示 CSS 选择器的字符串(例如 div#my_id.my_class)。
    当将this 作为 jQuery 函数的参数传递时,它会根据当前元素(this 所指的内容)返回一个 jQuery 对象,因此您不能使用 $(this + selector) 之类的东西。

    【讨论】:

      【解决方案4】:

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

      基本上this 是回调引用的DOM 元素。你不能这样做 $(this + " div") 因为你正在向一个元素添加一个字符串。您首先需要像在第三个代码 sn-p 中一样获取 id。

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

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

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

      【讨论】:

        【解决方案5】:

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

        $(this).children("div")
        

        表示从特定对象,获取所有子对象,见以下链接: http://jsfiddle.net/vietean/f2Yrg/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-07-26
          • 1970-01-01
          • 1970-01-01
          • 2010-10-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-16
          相关资源
          最近更新 更多