2010-10-26 77 views
0

我已經閱讀了另一個職位/關於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的方法/功能...?

我不是一個強大的程序員,任何澄清將不勝感激!

回答

3

activetab是所選定位標記的hrefshow()是一個jQuery方法。該方法需要由jQuery對象調用。 $(activetab)是一個jQuery對象。雖然可能不是你想要的。

如果您希望第二個工作並使用$作爲變量的前綴,您仍然需要將其設置爲jQuery對象。你可以通過$($activetab).show()這樣做。

+0

啊 - 簡單但有效 - 爲我解答。我顯然錯過了$()的含義,事實上,這是什麼使jQuery的對象。謝謝傑森! – soba3 2010-10-26 21:38:31

0

在變量前面使用$符號是JavaScript程序員用來識別它是jQuery對象的命名約定。這裏的a good article回顧了一些常見的命名約定(關於你的問題請看#3)。也是中級程序員的一個很好的進修。

在你的第一個例子中,activetab是一個jquery對象集合。做$(activetab)是多餘的,實際上是從jQuery對象中創建一個jQuery對象。你可以簡單地做activetab.show();

+0

'activetab'不是第一個例子中的jQuery對象。 – 2010-10-26 19:38:31

2

我想你是在問兩個問題。首先是$和沒有區別。大多數開發人員在變量前使用$,因爲後來他們知道這是一個jQuery對象。

第二個問題,爲什麼代碼不起作用。這是因爲你正在做attr('href')。它返回屬性值。你不能顯示,因爲show()是一個jquery函數,它在html中取消隱藏div。我想你想要的是alert或console.log。

+0

被隱藏的元素不一定需要是一個div :) – BalusC 2010-10-26 19:50:07

+0

我知道有人會這麼說! – 2010-10-26 20:44:26

1

我這樣想的jQuery的「包裝」,也許它不是長期的物盡其用,但讓我解釋一下:
當你把類似$(someobj),你基本上是添加jQuery的功能,該對象;你正在「包裝」jQuery。一旦你這樣做了,你就可以訪問該對象的所有jQuery功能。然而,既然你已經「包裹」了它,那麼這個對象就不再像你開始的那個一樣。爲了跟蹤您是否使用jQuery「包裝」對象,您可以在變量名稱的開頭添加一個$,以便稍後當您讀取代碼時,您會知道該對象具有(或沒有)jQuery功能。
注意:如果你想從jQuery對象中取回原始對象,你可以使用$myjqueryobj.get()

在您的示例中,您將返回點擊項目中第一個標記的href值。這是一個字符串並將其傳遞到jQuery對象,如下所示:$(activetab)將href值視爲選擇器(不是)。你可以使用alert(activetab);來測試它的價值,你會發現它不是一個jQuery對象,它是一個字符串。

這兩種方法的工作方式都是一樣的,因爲JavaScript不關心一個變量是否以$開頭。它僅供程序員參考。

+0

「$(activetab)將href值視爲選擇器」 - 是的,現在我看到了 - 在你和Jason之間(上圖),你讓我看到了光:o)謝謝! – soba3 2010-10-26 21:51:38

相關問題