2011-09-09 58 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()。所以我可能认为我使用的方式是正确的。谢谢! –

相关问题