【问题标题】:What does the $() function do in JavaScript?$() 函数在 JavaScript 中的作用是什么?
【发布时间】:2010-01-30 10:33:29
【问题描述】:

$() 函数在以下示例中的作用是什么?

function test(){
    var b=$('btn1');
    eval(b);
}

【问题讨论】:

  • 在 Javascript 中,$ 只是在命名变量或函数时使用的另一个字符,例如 _q
  • 我不明白你为什么选择马泰斯的答案是正确的。您的问题是“$ 函数在 javascript 中的作用是什么?”所以,这意味着您想知道该功能的作用......不是吗?虽然,您作为正确答案提出的答案是“$ 是 JS 函数还是我正在处理 JS 框架/库?”之类的问题。我的回答很好,很笼统,但我认为最完整的是 Vassallo 发布的那个。

标签: javascript


【解决方案1】:

$() 方法不是 JavaScript 语言的一部分。它通常在 jQueryPrototype 等 JavaScript 框架中定义为 DOM 选择器。

有趣的是,直到 2009 年 12 月,ECMAScript 规范曾经声明:

美元符号 ($) 和下划线 (_) 允许在任何地方 标识符。 美元符号是 仅用于机械地使用 生成的代码。 (Source)

但是,这个“机械生成代码的美元符号”提示已从 current ECMAScript specification(ECMA 262 - 第 5 版/2009 年 12 月)中删除。


尽管如此,最初的问题可能是指 jQuery、Prototype 等中流行的 DOM 选择器。以下是几个 jQuery 示例:

$('*');         /* This selector is a wild card method and will select all 
                   elements in a document. */

$('#id');       /* This selector selects an element with the given ID. */

$('.class');    /* The class selector will gather all elements in the 
                   document with the given class name. */

$('element');   /* This selector will collect all elements in a document with 
                   the given tag name i.e. table, ul, li, a etc. */

您可能需要查看以下文章以获取更多示例:

【讨论】:

【解决方案2】:

这不是 ECMAScript (JavaScript) 的一部分。它只是您的某个库定义的函数。通常是 jQuery 或 PrototypeJS。

【讨论】:

【解决方案3】:

我认为您在这里处理的是一个框架。 大多数框架都包含 $ 函数,用于从选择器或 dom 对象生成自定义对象。

【讨论】:

【解决方案4】:

回答您的问题,此函数返回具有指定 ID 的 DOM 对象。

例如,如果您的 HTML 中有:


<div id="thisIsMyDivId">This is some content</div>

您可以使用以下方法获取 DIV 元素:


var myDiv = $('thisIsMyDivId');

这个函数的想法是代替使用document.getElementById来做这个的必要性。

而且......重复这里的每个人已经做过的......它不是原生的 JS 函数,它是在一些框架(Prototype 和 jQuery AFAIK)上实现的。

【讨论】:

  • 这是错误的,因为您期望 MooTools 或 Prototype 已覆盖 $ 函数。如果我说window.$ = function(){alert('foo!');return null;} 这会稍微改变结果,不是吗?此外,jQuery 需要在 ID 之前添加一个 #(即 $('#id') 并返回自身 (jQuery),而不是 DOM 元素本身(尽管这可以通过返回的 jQuery 对象上的属性访问,即 $('#id')[0], if有结果)
  • 嗨,丹,你似乎有点困惑。请查看以下链接,以便我们在同一页面上:mootools.net/docs/core/Element/Element prototypejs.org/api/utility/dollar 请仅在您确定自己在做什么时投反对票。如果您有任何疑问,或者在理解 JS 框架的文档方面需要一些帮助,请告诉我。我的示例不是 jQuery 示例。我知道 jQuery 以及其他框架上使用的语法,你知道吗?你知道吗?如果没有,我放在这里的链接将对您有所帮助。干杯!
  • 这确实是一个native函数。 stackoverflow.com/questions/2167544/63670555#63670555
  • @user10398534 这不是真的。这些功能仅在浏览器的开发工具中可用。请参阅此答案stackoverflow.com/a/22244912Crome 文档有一条警告说明此差异developers.google.com/web/tools/chrome-devtools/console/…
【解决方案5】:

它不是 JS 内置函数,它的 Prototype
http://www.prototypejs.org/api/utility/dollar-dollar

【讨论】:

【解决方案6】:

$ 符号不是 javascript 的一部分,它是 javascript 框架的一部分,可能是 jQuery

更多详情看this文章

【讨论】:

  • 为了更清楚一点,$ 只是一个变量名,就像你有 var b=A('btn1'); 一样,大多数 JS 库只使用 $,因为它不太可能发生冲突,而且它也脱颖而出。
  • 如果它像$('btn1') 那样被使用,那就不是jQuery。 jQuery 会做 $('#btn1').
【解决方案7】:

提供的答案根本不正确。

在这张照片中(在 Chrome about:blank 标签上拍摄),您可以清楚地看到没有 jQuery。鉴于文档是空白的,因此也没有 PrototypeJS。与所有其他答案相反,这是一个可以在任何网站上使用的原生 JavaScript 函数。

下图为函数定义。

ƒ $(selector, [startNode]) { [Command Line API] }

如果这还不够令人信服,下面是 jQuery 的函数定义:

ƒ (a,b) {return new n.fn.init(a,b)}

这是 PrototypeJS 中的函数。

function $(element) {
    if (arguments.length > 1) {
      for (var i = 0, elements = [], length = arguments.length; i < length; i++)
        elements.push($(arguments[i]));
      return elements;
    }

    if (Object.isString(element))
      element = document.getElementById(element);
    return Element.extend(element);
  }

我不同意这段代码经过适当优化,我肯定会这样写

function $(element) {
    if (arguments.length > 1) {
        let elements = [];
        for (let i in arguments) elements.push($(arguments[i]));
        return elements;
        //or simply `return arguments;` without the loop and extra variable
    }
    return Object.isString(element) && (e = document.getElementById(element)), Element.extend(element)
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-23
  • 2018-03-01
  • 1970-01-01
  • 2021-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多