jquery变量,有和没有$前缀的区别

时间:2010-10-26 19:26:10

标签: jquery function variables methods

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

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

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

..以及为什么这会抛出'$ activetab.show不是函数'错误:

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

从我可以收集的内容中,两种方式都显示变量以保存正确的值 - 只有第二个版本不允许我将jquery方法/函数附加到它...?

我不是一个强大的程序员,任何澄清都会受到赞赏!

4 个答案:

答案 0 :(得分:3)

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

如果您希望第二个工作并使用$为变量添加前缀,则仍需要将其设为jQuery对象。您可以$($activetab).show()完成此操作。

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

我喜欢将jQuery视为“包装器”,也许这不是该术语的最佳用法,但让我解释一下:
当您放置$(someobj)之类的内容时,您实际上是在向该对象添加jquery功能;你在它周围“包装”jQuery。完成此操作后,您可以访问该对象的所有jQuery功能。但是,既然你已“包裹”它,那么该对象就不再与你开始的那个对象相同。为了跟踪你是否正在使用jQuery“包装”对象,你可以在变量名的开头添加一个$,以便稍后在读取代码时,你会知道该对象有(或没有)jQuery功能 注意:如果要从jQuery对象获取原始对象,可以使用$myjqueryobj.get()

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

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

答案 3 :(得分:0)

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

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