【问题标题】:jquery is not functional? [duplicate]jquery 不能正常工作? [复制]
【发布时间】:2017-07-28 05:05:36
【问题描述】:

firefox (v52.0), jquery

这行得通:

// example 1
$('html').find('body')

这行得通:

// example 2
var h
h=$('html')
h.find('body')

这不起作用:

// example 3
var f
f=$('html').find
f('body')

我明白了

错误:访问属性“ownerDocument”的权限被拒绝

为什么?

但这有效:

// example 4
var a
a = x => $('html').find(x)
a('body')

【问题讨论】:

  • 部分问题是知道要问什么,
  • 我同意,我不认为这是重复的,尽管链接的答案提供了一个很好的解决方案。

标签: javascript jquery


【解决方案1】:

示例 3 不起作用,因为当您将 find 分配给 f 时,它在全局上下文中被调用。如果您使用call 并传入一个有效的jQuery 对象作为上下文,则代码可以工作。试试这个

var f = $('html').find;
console.log(f.call($('html'), 'body').length)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

此外,示例 4 有效,因为 a 如果不使用箭头函数编写,则可以转换为以下代码。

var a = function(x) {
  return $('html').find(x);
};

这只是示例 1,但带有一个包装函数以获取参数

【讨论】:

  • 这似乎有效。但是那个错误信息是什么意思?
  • 我实际上得到了一个不同的错误信息,“this.pushStack is not a function”。我知道这个错误是因为 this 上下文不是有效的jQuery 对象。也许,您的错误也与上下文错误有关。
  • 我认为你的回答是正确的。 javascript this 让我很困惑。
  • 阅读this 以获得很好的解释。
【解决方案2】:

不,jQuery 不起作用

通过查看 jQuery 核心源代码: https://github.com/jquery/jquery/blob/master/src/core.js#L51

您可以看到它在this 中保持状态。

f=$('html').find中,fthis发生了变化,不再是this保持$('html')状态

--

在这种情况下,您只是代理方法调用。 findthis 没有变化。

var a
a x => $('html').find(x)
a('body')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 2016-07-01
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多