Javascript jQuery过滤器效率
我最近遇到了一个问题: 当前接受的答案似乎表明$'element'.is':hidden'比$'element:hidden'更可取,因为:hidden筛选器仅应用于单个元素 但是。。。调用.is还会在调用另一个函数时增加额外的开销 这让我想到,如果选择器是一组元素,那么上述使用的推理是否成立 还有更极端的情况呢?以以下测试用例为例: $'element.class1:not.class2:visible[rel=foo]' 最好把它们留在选择器中吗?或者将它们全部移动到单个筛选器调用中: $'element'.filter'.class1:不可见.class2:可见[rel=foo]' 还是把它们锁起来更好Javascript jQuery过滤器效率,javascript,jquery,Javascript,Jquery,我最近遇到了一个问题: 当前接受的答案似乎表明$'element'.is':hidden'比$'element:hidden'更可取,因为:hidden筛选器仅应用于单个元素 但是。。。调用.is还会在调用另一个函数时增加额外的开销 这让我想到,如果选择器是一组元素,那么上述使用的推理是否成立 还有更极端的情况呢?以以下测试用例为例: $'element.class1:not.class2:visible[rel=foo]' 最好把它们留在选择器中吗?或者将它们全部移动到单个筛选器调用中: $'
$('element').is('.class1').not('.class2').is(':visible').filter('[rel="foo"]')
$元素'.is'.class1'.not'.class2'.is':可见'.filter'[rel=foo]'
当前接受的答案似乎表明$'element'.is':hidden'比$'element:hidden'更可取,因为:hidden筛选器仅应用于单个元素
我一点也不这么看,假设您处理的是一个字符串,那么$some选择器:hidden不仅仅应用于单个元素;它应用于与某个选择器匹配的所有元素
还是把它们锁起来更好
$('element').is('.class1').not('.class2').is(':visible').filter('[rel="foo"]')
这将失败,因为返回布尔值:
I.选举人
描述:对照选择器、元素或jQuery对象检查当前匹配的元素集,如果这些元素中至少有一个与给定参数匹配,则返回true
如果要选择匹配多个条件的元素,可以将这些条件放在选择器字符串中。您应该问自己的唯一真正问题是是否在字符串中使用:hidden和其他jQuery ISM,因为这意味着jQuery无法将选择传递给浏览器内置的read:fast选择器引擎,而必须自己完成这项工作
因此,对于该示例,您可能更愿意将jQuery ISM移出它:
$('element.class1:not(.class2)[rel="foo"]').filter(":visible")
当前接受的答案似乎表明$'element'.is':hidden'比$'element:hidden'更可取,因为:hidden筛选器仅应用于单个元素
我一点也不这么看,假设您处理的是一个字符串,那么$some选择器:hidden不仅仅应用于单个元素;它应用于与某个选择器匹配的所有元素
还是把它们锁起来更好
$('element').is('.class1').not('.class2').is(':visible').filter('[rel="foo"]')
这将失败,因为返回布尔值:
I.选举人
描述:对照选择器、元素或jQuery对象检查当前匹配的元素集,如果这些元素中至少有一个与给定参数匹配,则返回true
如果要选择匹配多个条件的元素,可以将这些条件放在选择器字符串中。您应该问自己的唯一真正问题是是否在字符串中使用:hidden和其他jQuery ISM,因为这意味着jQuery无法将选择传递给浏览器内置的read:fast选择器引擎,而必须自己完成这项工作
因此,对于该示例,您可能更愿意将jQuery ISM移出它:
$('element.class1:not(.class2)[rel="foo"]').filter(":visible")
您可以自己测试:。虽然是一个相对轻量级的调用,因为元素已经在内存中。是DOM访问减慢了速度。将其放入一个jsperf或中,然后自己对答案进行grt…只有使用.filter not.is$…filter.class1时才能链接它们。您可以自己测试:。虽然是一个相对轻量级的调用,因为元素已经在内存中。是DOM访问减慢了速度。将其放入jsperf或中,然后自己grt答案…只有使用.filter not.is$…filter.class1时才能链接它们。我必须读两遍这很有意义,只是必须读两遍,因为它看起来是错误的方式/使用了错误的代码段,换句话说:$'element'.is':hidden'也适用于多个元素,而不仅仅是单个元素-在一般情况下。在链接的问题中,碰巧只有一个元素。我读了两遍这很有意义,只是读了两遍,因为它看起来是错误的方式/使用了错误的代码段,所以换言之:$'element'。is':hidden'也适用于:hidden到多个元素,不只是一个单一的元素-在一般情况下。在连接的问题中,碰巧只有一个元素。