【问题标题】:How can I tell, if window is in a jQuery set?我如何判断窗口是否在 jQuery 集中?
【发布时间】:2012-06-16 12:53:25
【问题描述】:

我希望我的 jQuery 插件在 $(window) 选择上调用时表现不同。我如何检查window 是否在集合中?到目前为止我的尝试:

>>> $(window) == $(window)
false
>>> $(window).is(window)
false
>>> $(window).filter(window).length
0

(顺便说一下,对于document,这些都可以正常工作。)当然,我总是可以检查this[0],但是这种方法无法满足像$('a').add(window) 这样的边缘情况。

我也可以通过函数过滤:

>>> $(window).filter(function() { return this === window; }).length
1

但我希望有更多的“jQuery-ish”或通用方法。

【问题讨论】:

  • $(window) == $(window) 怎么可能返回false
  • 不知道。我认为这与窗口的特殊性有关。在其他情况下,jQuery lib 缓存选择(因此返回相同的对象),但我似乎记得,window 的处理方式不同。
  • @undefined 它们是 2 个不同的包装器,这就是原因。对象是相等的,如果它们是对 same 对象的引用。
  • 就是代码中的那个地方:github.com/jquery/jquery/blob/master/src/core.js#L185jQuery每次生成一个新的类数组对象,$(window)被调用。
  • @undefined 我猜他们是两个不同的 jQuery 实例

标签: jquery window filtering


【解决方案1】:

您可以使用index() 并将window 对象传递给它。如果window 对象不是集合的一部分,则它将返回-1,否则它在集合中的从零开始的索引:

>>> $(window).index(window) >= 0
true

>>> $("a").add(window).index(window) >= 0
true

>>> $("a").index(window) >= 0
false

【讨论】:

    【解决方案2】:

    AFAIK,只有 $(window).parent()$(document).parent() 返回一个空数组。 也许你可以使用类似的东西

    var test = window
      //undefined
    $(test).parent().length == 0 && !$(test).is(document)
      //true
    test = document
      //#document
    $(test).parent().length == 0 && !$(test).is(document)
      //false
    

    【讨论】:

    • 就我而言,这非常有效 ($([window, document]).parent().length != $([window, document]).length)。 +1。我接受 +Frédéric Hamidi 的回答,因为它更接近实际问题(也就是说,它会给 $(document) 带来误报)。
    【解决方案3】:

    .is($(window)) 有效:

             $(window).is($(window))​    //true
    $('a').add(window).is($(window))   //true
    

    【讨论】:

    • 不错的解决方案。我接受 +Frédéric Hamidi 的回答,因为它在没有创建另一个 jQuery 实例的情况下相处,但除此之外,这看起来也不错。谢谢!
    猜你喜欢
    • 2010-09-27
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 2010-10-02
    相关资源
    最近更新 更多