2011-09-09 103 views
0

我有一個通用的jQuery選擇(字符串):檢查是否選擇匹配特定類元素標記

var selector = '#files li div'; 

和類的名稱:

var myClass = 'folder'; 

我要檢查如果選擇器與存儲在myClass中的類匹配。 至於現在,我使用的選擇的一個實例調用方法hasClass():

var match = $(selector).hasClass(myClass); 

它的工作原理,但我認爲它可能存在一些更有效的jQuery方法,它允許不創建一個jQuery實例獲取選擇器匹配的所有元素。
我的擔心是僅爲此檢查創建的實例所使用的內存,僅此而已,儘管它位於僞類的方法內,該類不返回/暴露對此實例的任何引用。

你能提出一些更好的建議嗎?

<編輯>
在這個例子中顯示我設置的值myClass的到「文件夾」只是很簡單地表示這個問題,但在應用程序,我不知道它在進步,因爲它被定義通過用戶操作。
</EDIT >

+1

除非我誤解了這個問題,你可以使用#files li div.folder – Corbin

+0

只需檢查'$('#files li div .folder')。長度' – m90

+0

@ m90:它會是'$('#files li div.folder')。'長度' – Matt

回答

0

要麼給ID唯一性 或 如果你想多個實例應用上創建一個類

3

hasClass()如果匹配的元素中的任何有將返回true指定的類;不是如果全部是他們做的。

您可能會發現下面是更多你想要什麼:

var match = $(selector).filter('.' + myClass); 

但你可以把它簡化爲:

var match = $(selector + '.' + myClass); 

然後你會檢查是否有任何元素使用左側.length屬性。

if (match.length) // then some were matched! 

在擔心內存使用方面...... premature optimization is the root of all evil。這裏的內存使用量是tiny。如果你想優化你的程序(目前有需求嗎?),查看被稱爲很多次的函數,或者查看具有大量迭代的循環,或者查看DOM操作並查看是否他們可以合併;一個jQuery選擇器不會使任何與您的程序在相對條件下的速度產生差異。

+0

搜索選擇是否包含**幾乎只有一個匹配該類的**元素就是我所需要的,這就是爲什麼我使用hasClass()。所以我可能認爲我使用的方式是正確的。謝謝! –

相關問題