jQuery过滤效率

时间:2017-09-11 16:08:39

标签: javascript jquery

我最近遇到过这个问题:How do I check if an element is hidden in jQuery?

目前接受的答案似乎表明Ligne.class优于mapperFactory.classMap(Value.class, Ligne.class).field().field("codeActivite1.value", "tasks.tasks[0].notes").register(); public class Value { @SerializedName("code_activite1") private CodeActivite1 codeActivite1; //getter setter } public class CodeActivite1 { @SerializedName("value") private String value; //getter setter } public class Ligne { private Tasks tasks; //getter setter } public class Tasks{ private Task[] tasks; //getter setter } public class Task { private String notes; //getter setter } ma.glasnost.orika.MappingException: java.lang.IllegalArgumentException: java.lang.String is an unsupported source class for constructing instances of com.xxxx.business.xxxx.bean.Task[] ,因为$('element').is(':hidden')过滤器仅适用于单个元素。

但是......当你调用另一个函数时,调用$('element:hidden')也会增加额外的开销。

这让我想到,如果选择器是一组元素,那么使用:hidden的上述

那么更极端的情况呢?采取以下测试用例:

.is()

最好将它们留在选择器中吗?或者将它们全部移动到一个过滤器调用中:

.is()

或者链接它们会更好吗?

$('element.class1:not(.class2):visible[rel="foo"]')

1 个答案:

答案 0 :(得分:4)

  

目前接受的答案似乎表明$('element').is(':hidden')优于$('element:hidden'),因为:hidden过滤器仅适用于单个元素。

我根本不会这样读,假设你正在处理字符串,那么$("some-selector:hidden") 不是<\ n < / strong>仅适用于单个元素;它适用于与some-selector匹配的所有元素。

  

或者链接它们会更好吗?

$('element').is('.class1').not('.class2').is(':visible').filter('[rel="foo"]')

那会失败,因为is返回一个布尔值:

  

.is(selector)

     

描述:针对选择器,元素或jQuery对象检查当前匹配的元素集,如果这些元素中至少有一个与给定的参数匹配,则返回true。

如果要选择符合多个条件的元素,可以将这些条件放在选择器字符串中。您应该问自己唯一真正的问题是,是否在字符串中使用:hidden和其他jQuery-isms,因为这意味着jQuery无法将选择传递给浏览器的内置(阅读: 快速 )选择器引擎,并且必须自己完成工作。

出于这个原因,在这个例子中,你可能更喜欢将jQuery-isms移出它:

$('element.class1:not(.class2)[rel="foo"]').filter(":visible")