【问题标题】:Checking if a selector matches elements marked by a specific class检查选择器是否匹配由特定类标记的元素
【发布时间】:2011-11-13 16:45:13
【问题描述】:

我有一个通用的 jQuery 选择器(一个字符串):

var selector = '#files li div';

以及类名:

var myClass = 'folder';

我想检查选择器是否匹配将类存储在 myClass 中的元素。 到目前为止,我使用选择器的一个实例来调用方法 hasClass():

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

它可以工作,但我认为它可能存在一些更有效的 jQuery 方法,它允许不创建 jQuery 实例来获取选择器匹配的所有元素。
我担心的是仅为此检查创建的实例使用的内存,仅此而已,尽管它位于伪类的方法中,不会返回/公开对此实例的任何引用。

你能提出更好的建议吗?


在显示的示例中,我将 myClass 的值设置为“文件夹”只是为了方便地表示问题,但在应用程序中我事先并不知道,因为它是由用户操作定义的。

【问题讨论】:

  • 除非我误解了问题,否则您可以使用#files li div.folder
  • 检查$('#files li div .folder').length
  • @m90:应该是$('#files li div.folder').length
  • 很遗憾没有,变量 myClass 可以包含任何值,我事先并不知道,它是由用户通过 UI 进行的操作定义的。在示例中,我将其设置为“文件夹”只是为了更好地揭示问题。
  • 您也可以在选择器中使用变量。只需根据需要连接字符串。

标签: jquery dom jquery-selectors traversal


【解决方案1】:

hasClass() 将返回 true 如果 any 匹配的元素具有指定的类;如果所有都这样做,则不会。

您可能会发现以下是您想要的更多:

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。这里的内存使用量很小。如果你想优化你的程序(目前是否需要?),查看被大量调用的函数,或者查看具有大量迭代的循环,或者查看 DOM 操作,看看是否它们可以组合;相对而言,一个 jQuery 选择器不会对您的程序速度产生任何影响。

【讨论】:

  • 搜索选择是否包含与该类匹配的几乎一个元素正是我所需要的,这就是我使用hasClass()的原因。所以我可能认为我使用的方式是正确的。谢谢!
【解决方案2】:

为唯一性分配 ID 要么 如果您想在多个实例上应用,请创建一个类

【讨论】:

    猜你喜欢
    • 2011-03-19
    • 2023-03-06
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    相关资源
    最近更新 更多