提问人:Eli 提问时间:7/30/2011 最后编辑:Eli 更新时间:7/30/2011 访问量:84
有没有更好的方法使用jQuery按类查找单个元素?
Is there a better way to find a single element by class with jQuery?
问:
我经常发现自己通过抓取模板、克隆它、将其设置为变量并使用 find('.class') 在其下查找元素,然后为它们分配唯一 ID 并在将列表项附加到我正在做的任何列表之前使用它们来构建列表项行或其他东西。
例如,如果我有一个项目列表,所有这些项目都是从模板设置的,并且包括由类指定的子项目,我会做这样的事情(未测试,只是一个过程示例):
// 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);
现在,我可以访问第 X 个列表项的第一个“字段”,例如 $('#field_one_[ListItemID]。
问题是,即使我指定了$ListItem,我知道当我使用 find('.field_one') 查找要添加 id 的字段时,它会遍历模板中的每个元素以查找该类。这并不是对性能的影响,但如果它是一个长列表或一个长模板,它就会加起来。
有没有更有效的方法可以做到这一点?就像你对一个名为 .findOnce() 的函数所期望的那样......?
谢谢!
答:
您可以使用 :first 选择器
http://api.jquery.com/first-selector/
$ListItem.find('.field_one:first') ....
就个人而言,我不会将 $ 作为 js 变量的前缀。它会与 jquery 中的 $ 混淆。
只需使用var ListItem
评论
这取决于你的 DOM 是如何设置的。 比 快,例如,就像 比 快 一样。children()
find()
parent()
parents()
例:$ListItem.children('.field_one')
我不确定您是否需要为其分配 ID。您能否通过或使用第 n 个子项选择器来引用该项目。$ListItem.find('.field').index(0)
$ListItem.find('.field:nth-child(1)')
评论