【问题标题】:jquery variables, the difference between with and without $ prefixjquery变量,有无$前缀的区别
【发布时间】:2011-04-30 22:42:42
【问题描述】:

我已经阅读了另一个关于 jquery 变量的帖子/问题,它很有用,但我仍然无法理解...... 下面是我正在修改的一个简单的选项卡式内容功能的一些代码。

请有人解释一下为什么会这样:

$tabMenuItem.click(function() {     
    var activetab = $(this).find('a').attr('href'); 
    $(activetab).show(); //show the active ID content
    return false;
});

..以及为什么会抛出“$activetab.show is not a function”错误:

$tabMenuItem.click(function() {     
    var $activetab = $(this).find('a').attr('href'); 
    $activetab.show(); //show the active ID content     
    return false;
});

据我所知,两种方式都显示变量保持正确的值 - 只有第二个版本不允许我将 jquery 方法/函数附加到它...?

我不是一个强大的程序员,任何澄清将不胜感激!

【问题讨论】:

    标签: jquery function variables methods


    【解决方案1】:

    我喜欢把 jQuery 看作一个“包装器”,也许它不是这个词的最佳用法,但让我解释一下:
    当您输入$(someobj) 之类的内容时,您实际上是在向该对象添加 jquery 功能;你正在围绕它“包装”jQuery。完成此操作后,您就可以访问该对象的所有 jQuery 功能。但是,由于您已经“包装”了它,因此该对象不再与您开始时的对象相同。为了跟踪您是否使用 jQuery “包装”对象,您可以在变量名称的开头添加一个 $,以便稍后在阅读代码时,您会知道该对象具有(或没有)jQuery 功能。
    注意:如果要从 jQuery 对象中取回原始对象,可以使用$myjqueryobj.get()

    在您的示例中,您将返回单击项目中第一个 a 标记的 href 值。这是一个字符串并将其传递给 jQuery 对象,如下所示:$(activetab) 将 href 值视为一个选择器(它不是)。你可以使用alert(activetab);来测试它的值是多少,你会发现它不是一个jQuery对象,它是一个字符串。

    这两种方法的工作方式相同,因为 JavaScript 不关心变量是否以 $ 开头。仅供程序员参考。

    【讨论】:

    • " $(activetab) 将 href 值视为选择器“ - 是的,我现在看到了 - 在你和 Jason(上图)之间,你让我看到了曙光 :o)谢谢!
    【解决方案2】:

    activetab 是所选锚标记的hrefshow() 是一个 jQuery 方法。该方法需要由 jQuery 对象调用。 $(activetab) 是一个 jQuery 对象。虽然可能不是你想要的。

    如果您希望第二个工作并使用$ 为您的变量添加前缀,您仍然需要将其设为 jQuery 对象。您可以通过$($activetab).show() 这样做。

    【讨论】:

    • 啊 - 简单但有效 - 这为我解答。我显然错过了 $() 的含义,事实上它是构成 jquery 对象的原因。谢谢杰森!
    【解决方案3】:

    我想你在问两个问题。首先是$和没有之间的区别。大多数开发人员在变量前面使用 $,因为后来他们知道这是一个 jquery 对象。

    第二个问题,为什么该代码不起作用。这是因为你在做 attr('href')。它返回属性值。您无法显示,因为 show() 是一个 jquery 函数,可以取消隐藏 html 中的 div。我认为您想要的是警报或 console.log。

    【讨论】:

    • 被取消隐藏的元素不一定是 div :)
    • 我就知道有人会这么说!
    【解决方案4】:

    在变量前面使用 $ 符号是 JavaScript 程序员用来识别它是 jQuery 对象的命名约定。这是a good article 讨论一些常见的命名约定(请查看关于您的问题的#3)。对于中级程序员来说,它也是一个很好的复习。

    在您的第一个示例中,activetab 是一个 jquery 对象集合。执行 $(activetab) 是多余的,实际上是从 jQuery 对象创建 jQuery 对象。你可以简单地做 activetab.show();

    【讨论】:

    • activetab 在第一个示例中不是 jQuery 对象。
    猜你喜欢
    • 2017-05-04
    • 2017-09-21
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    • 2011-03-18
    • 2013-08-03
    • 1970-01-01
    • 2015-07-29
    相关资源
    最近更新 更多