0

我有这段代码可以操作 asp.net treeview html 代码。

此代码经常运行,因此尽可能快地运行很重要。

我想了解更多关于 jquery 选择器和提高它的速度。到目前为止,我能够自己获取此代码。

我不确定的一些事情是如果你想要第三个子元素,我使用[2]or .eq(2)or: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();
                }
            }
        }
    }
}
4

1 回答 1

1

您可以进行一些优化。第一个肯定是使用.eq()而不是[]. 像这里一样,您正在创建一个 jQuery 对象:

var sectionNodes = $("#" + treeviewID + " > table");

但后来,你这样做:

sectionName = $(sectionNodes[i]).text();
divContainer = $(sectionNodes[i]).next('div');

在这里,您正在创建另外 2 个不需要的 jquery 对象,您可以这样做:

sectionName = sectionNodes.eq(i).text();
divContainer = sectionName.next('div');

然后,我不知道您是否有其他方法可以做到这一点,但是如果您可以删除“循环中的循环”,那就太好了。

之后,不要使用上下文选择器 ( $('selector', $element)),而是使用 find。上下文使用 find 所以它会减少函数调用的数量。以这条线为例:

 $('td', $(itemNodes[j])).eq(2)

当您可以在没有额外对象的情况下执行相同操作并且可以使用时,您正在创建 2 个 jQuery 对象.find()

itemTag = itemNodes.eq(j).find('td').eq(2);

基本上,使用.find()而不是上下文并避免创建不需要的 jQuery 对象。希望这会有所帮助。

于 2013-06-24T18:33:23.457 回答