jQuery .find()函数的替代方案是什么?

3

.find()函数在IE 7及以下版本中运行非常缓慢,经常导致卡顿。

有人能推荐一个替代方案吗?

这是代码片段。

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

可能是重复的问题:jQuery的find()方法有什么替代方案? - Damien Locque
7
我认为这不是重复的问题;那个问题是关于行为的,而这一个则关于性能。 - Pointy
1
.find 的性能因浏览器和选择器而异。请告诉我们您使用的选择器示例,我们可以帮助您选择更好的选择器。另外,您使用的是哪个版本的 jQuery? - Kevin B
1
无论如何 - 我们需要看到一些具体的代码。这取决于你想要找到什么。IE7很慢,但它可以被优化以达到良好的性能。然而,如果没有看到你的代码,没有人能够帮助你。 - Pointy
以下是代码片段。$(“.dobAutoTab”)。each(function(){ var dobFields = $(this).children()。find(“input”); var fldDate = $(dobFields [0]); var fldMonth = $(dobFields [1]); var fldYear = $(dobFields [2]); )}; - StarDust
3个回答

8
大多数情况下,取决于您想要实现的目标:
  • .filter() 仅搜索那些满足前提条件的元素。
  • .find() 搜索子代、子孙和所有后代。
  • .children() 功能完全相同,但只会找到子代,不会找到更远的后代。
  • .closest() 获取与选择器匹配的最近(第一个)元素,从当前元素开始。
  • .parent() 获取当前一组匹配元素中每个元素的父元素,可选择使用选择器进行过滤。
当然,您的选择器越具体,结果就越快。
如果可以,尽量在上下文中搜索所需内容,这样将更快。有关选择器的更多信息,请参阅此处

3
尝试使用普通CSS选择器,例如$('#id span')基本上等同于$('#id').find('span')但速度快得多。
但无论如何,一些代码示例将使您获得更具体的答案。

这是代码片段。 $(“.dobAutoTab”).each(function(){ var dobFields = $(this).children()。find(“input”); var fldDate = $(dobFields [0]); var fldMonth = $(dobFields [1]); var fldYear = $(dobFields [2]); }); - StarDust
最好在你的问题中不仅发布你的JS代码,还要发布你的HTML结构。也许你当前的方法在实现你想要的功能方面并不是非常有效/干净。 - Simon

1

正如Luis所说,.filter()、.children()、.closest()和parent()函数可以用作.find()函数的替代品。我想再添加两个jQuery选择器,作为.find()函数的替代品,它们如下:

  1. 子选择器(“parent > child”) 它只选择第一级后代或直接子元素。例如:$('#parent_id > #child_id')$(".parent > .first-level-child")
  2. 后代选择器(“ancestor descendant”) 它选择该元素的子元素、孙子元素、曾孙元素等。你可以使用$('#parent_id #child_id')$('#parent_id #grandchild_id')$(".parent .great-grand-child")$( "form input" )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接