我已经阅读了关于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方法/函数附加到它...?
我不是一个强大的程序员,任何澄清都会受到赞赏!
答案 0 :(得分:3)
activetab
是所选锚标记的href
。 show()
是一个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();