我有这个操作asp.net treeview html代码的代码。
此代码经常运行,因此它尽可能快地运行非常重要。
我想了解更多有关jquery选择器和提高速度的信息。到目前为止,我能够自己获取此代码。
我不确定的一些事情是,如果你想要第三个子元素,我是使用[2]
还是.eq(2)
还是:nth-child(2)
?另外,如果我使用$
来选择来自所选内容数组的内容,这是必要的,还是已经选中了?
有没有人知道我可以做些什么技巧或提示来提高我的jquery选择效率?
感谢。
function showResultsOnTreeview(treeviewID, filenameDictionary) {
var sectionNodes = $("#" + treeviewID + " > table");
var numOfSections = sectionNodes.length;
var i, j, sectionName, divContainer, itemNodes, numOfItems, itemName, itemTag, itemPath;
for (i = 0; i < numOfSections; i += 1) {
sectionName = $(sectionNodes[i]).text();
divContainer = $(sectionNodes[i]).next('div');
divContainer.hide();
itemNodes = $('table', divContainer);
numOfItems = itemNodes.length;
for (j = 0; j < numOfItems; j += 1) {
itemTag = $('td', $(itemNodes[j])).eq(2);
itemTag.removeClass('treeViewResult');
itemName = getNameFromItem($(itemNodes[j]).text());
itemPath = filenameDictionary[itemName];
if (itemPath != null) {
if (itemPath.indexOf(sectionName + "/" + itemName) != -1) {
itemTag.addClass('treeViewResult');
divContainer.show();
}
}
}
}
}
答案 0 :(得分:1)
您可以进行一些优化。第一个是肯定使用.eq()
而不是[]
。就像这里一样,你要创建一个jQuery对象:
var sectionNodes = $("#" + treeviewID + " > table");
但后来,你这样做了:
sectionName = $(sectionNodes[i]).text();
divContainer = $(sectionNodes[i]).next('div');
在这里你要创建另外两个不需要的jquery对象,你可以这样做:
sectionName = sectionNodes.eq(i).text();
divContainer = sectionName.next('div');
然后,我不知道你是否有不同的方法去做,但是如果你可以删除“循环中的循环”,那就太好了。
之后,使用find,而不是使用上下文选择($('selector', $element)
)。上下文使用find,这样可以减少函数调用的次数。以此行为例:
$('td', $(itemNodes[j])).eq(2)
如果没有额外的对象就可以创建2个jQuery对象,并且可以使用.find()
:
itemTag = itemNodes.eq(j).find('td').eq(2);
基本上,使用.find()
代替上下文,避免创建不需要的jQuery对象。希望这会有所帮助。