jquery .find()函数替代?

时间:2012-07-10 14:01:14

标签: jquery performance find

.find()函数在IE 7及更低版本中运行速度非常慢,经常导致挂起。

有人可以建议我另类吗?

以下是代码段。

$(".dobAutoTab").each(function() { 
    var dobFields = $(this).children().find("input"); 
    var fldDate = $(dobFields[0]); 
    var fldMonth = $(dobFields[1]); 
    var fldYear = $(dobFields[2]); 
)};

3 个答案:

答案 0 :(得分:6)

主要取决于你想要达到的目标:

  • .filter()仅搜索与前提条件匹配的元素。
  • .find()搜索儿童,儿童和所有后代。
  • .children()的工作方式完全一样,但只会找到孩子,而不是更远的后代。
  • .closest()从当前元素开始,获取与选择器匹配的更近(第一个)元素。
  • .parent()获取当前匹配元素集中每个元素的父元素,可选择通过选择器进行过滤。

当然,选择器越具体,结果就越快。

而且,如果可以,在上下文中搜索您需要的内容,那么这种方式会更快,有关选择器的更多信息,check here

答案 1 :(得分:3)

尝试使用普通的CSS选择器,$('#id span')例如基本上是$('#id').find('span')但速度要快得多。

但无论如何,一些代码示例会为您提供更具体的答案。

答案 2 :(得分:1)

正如Luis所说,.filter(), .children(), .closest() and parent()函数可替代.find()函数,我想从jquery选择器中向.find()函数的替代方法中添加另外两个选择器,如下所示: / p>

  1. Child Selector (“parent > child”),它仅选择一级后代或直接子元素。例如$('#parent_id > #child_id')$(".parent > .first-level-child")
  2. Descendant Selector (“ancestor descendant”),它会选择该元素的孩子,孙子,曾孙,依此类推。您可以在其中使用$('#parent_id #child_id')$('#parent_id #grandchild_id')$(".parent .great-grand-child")$( "form input" )