Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有更好的方法使用jQuery按类查找单个元素?_Jquery_Performance - Fatal编程技术网

有没有更好的方法使用jQuery按类查找单个元素?

有没有更好的方法使用jQuery按类查找单个元素?,jquery,performance,Jquery,Performance,我经常发现自己通过抓取模板、克隆模板、将其设置为变量,并使用find('.class')查找其下的元素,然后为它们分配唯一ID,或者在将列表项附加到任何列表之前使用它们来构建列表项行或其他内容 例如,如果我有一个项目列表,所有这些项目都是从模板设置的,并且包括子项目,这些子项目是由类指定的,那么我会这样做(未测试,只是一个流程示例): 现在,我可以访问第x个列表项的第一个“字段”,如$('#field_one.[ListItemID] 问题是,尽管我指定了$ListItem,但我知道当我使用fi

我经常发现自己通过抓取模板、克隆模板、将其设置为变量,并使用find('.class')查找其下的元素,然后为它们分配唯一ID,或者在将列表项附加到任何列表之前使用它们来构建列表项行或其他内容

例如,如果我有一个项目列表,所有这些项目都是从模板设置的,并且包括子项目,这些子项目是由类指定的,那么我会这样做(未测试,只是一个流程示例):

现在,我可以访问第x个列表项的第一个“字段”,如$('#field_one.[ListItemID]

问题是,尽管我指定了$ListItem,但我知道当我使用find('.field_one')来查找要添加id的字段时,它会遍历模板中的每个元素以查找该类。这对性能影响不大,但如果是一个长列表或长模板,则会累加

有没有一种更有效的方法来实现这一点?类似于您对名为.findOnce()的函数的期望


谢谢!

您可以使用:第一个选择器

就我个人而言,我并没有把$作为js变量的前缀,它会与来自jquery的$混淆


只需使用
var ListItem

它取决于DOM的设置方式。
children()
find()
快,例如,就像
parent()
parents()快一样


示例:
$ListItem.children('.field_one')

我不确定您是否需要为其分配一个ID。您是否可以改为通过
$ListItem.find('.field').index(0)
引用该项,或者使用第n个子选择器
$ListItem.find('.field:n个子项(1)'))

我不同意-我认为给变量命名是有意义的,这样你就知道框架依赖于它们。谢谢!问题-我的印象是:first、:nth child、:last等仅在找到所有匹配元素后才应用于结果集。我记错了吗?还是在第一个结果时停止,如果选择器是:first?我将其作为$ListItem(使用$)的原因就是指定它实际上是一个jQuery结果,这样它就不会与常规javascript变量混淆。谢谢。ID实际上是基于数据库的,因此例如accountnumber_77将是ID=77的帐户的数字字段。在这个字段上不能按位置进行,因为它们可能不符合顺序。
// Create my list item.
$ListItem = $('#list_item_template').clone();

// Set the id for the first field so I can work with it directly later.
$ListItem.find('.field_one).attr('id', 'field_one_'+ListItemID).val('field one value for this list item');

// Set the id for the second field so I can work with it directly later.
$ListItem.find('.field_two).attr('id', 'field_two_'+ListItemID).val('field two value for this list item');

// Add the item to the list
$ListItem.appendTo($List);
$ListItem.find('.field_one:first') ....