【问题标题】:Unable to find where $ is defined in the webpage无法找到网页中 $ 的定义位置
【发布时间】:2017-07-25 18:19:55
【问题描述】:

我试图操纵 dom 以包含脚本标记,其源指向 Google jQuery CDN。我的原始网页是一个简单的 html,没有包含其他脚本。但是我发现,即使没有将 jquery src 包含到我的页面中,当我键入 $ 时,它也会接受它并将其显示为一个函数。我正在使用 chrome 版本 59.0.3071.115。只需在控制台上输入 $ 即可显示第一个附加的屏幕截图。

我的问题是如何找出与 $ 关联的函数的定义位置以及它是如何被包含在内的。我已经尝试了“$”的搜索框,没有搜索结果。有趣的是,当我输入 jQuery 时,它显示未定义。我的猜测是 $ 正在用于其他一些功能。但是如果我输入类似 $('body') 的东西,它会给我从根元素开始的整个 body 树(第二个屏幕截图)。 我同事的机器上不会出现这个问题。任何帮助或指点将不胜感激!

我在 chrome 开发工具中检查的实际 html。

<html>
<h1 align="center">Beer Selection Page </h1>
<form method="POST" action="SelectBeer.do">
Select beer characteristics<p>
Color:<select name="color" size="1">
<option>light
<option>amber
<option>brown
<option>dark
<br><br>
<input type="SUBMIT">
</form>
</body>
</html>

【问题讨论】:

  • 控制台应该告诉你代码失败的行号
  • 有时 $ 不起作用,但 jQuery() 会起作用,具体取决于注入方式。
  • [Comman Line API] 告诉你$ 不是 jQuery 而是 chrome 中命令行 API 的一个函数。
  • 一段时间以来,它一直是 chrome 开发工具的一部分。它不是 jQuery,只是用于尝试查询选择器的人的类似语法。 (“命令行 api”告诉它这是开发工具的一部分)。本周我学到的有趣提示:单击 Dom 资源管理器中的任何元素,然后在控制台中输入 $0,它会引用该元素。

标签: javascript jquery google-chrome-devtools


【解决方案1】:

$ 在这种情况下不是指 jQuery,因此它没有在页面上的任何地方定义。实际上,它是开发人员工具的一部分。请参阅:developers.google.com。原来是document.querySelector的别名。

作为一个副节点,我能理解你的想法。据我所知,由于 jQuery 的流行,浏览器供应商在他们的开发工具中引入了 $(selector) 函数(正是这个名称)。但是,根据参考文档,

[如果一个页面]使用一个库,例如使用 $ 的 jQuery,这个功能将被覆盖,并且 $ 将对应于该库的实现。

【讨论】:

  • 这非常令人困惑和误导。
  • @JeremyThille Yip,特别是因为“如果页面有 jQuery,则 $ 是 jQuery,否则它是 document.querySelector”部分。如果要检查是否是jQuery,可以检查$.prototype,如果不是jQuery,则为undefined
【解决方案2】:

Chrome 开发工具添加了此功能。在您的页面上(而不是在开发工具中)尝试使用 JavaScript 中的 alert($); 以确认它不存在。

【讨论】:

    【解决方案3】:

    Dollar sign($) 不是这里的 jQuery,你可以试试看。一些 jQuery 命令,例如: $('h1').show() 或 .hide()

    那么,这里的$ 是什么。 在我的 Chrome 浏览器控制台中,它返回: function (a,b){return new n.fn.init(a,b)}

    在您的控制台中: function$(selector, [startNode]) { [Command Line API] }

    如果页面没有定义,则表明$被浏览器占用。 在 Chrome 的情况下,正是上述功能使调试变得容易。例如,如果您键入:

    $('h1')$('div') 在浏览器开发控制台中 您会发现它返回页面中的所有&lt;h1&gt;&lt;div&gt;

    因此,如果您的 html/js 代码没有明确定义 $$$,则定义 $ 和类似的 $$ 以及其他几个辅助函数/命令

    所以,下次请不要混淆!

    【讨论】:

      猜你喜欢
      • 2013-12-16
      • 2021-04-10
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 2019-12-11
      • 2014-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多