gpt4 book ai didi

javascript - 隐藏数千个
  • 元素的最快方法?
  • 转载 作者:可可西里 更新时间:2023-11-01 02:16:24 25 4
    gpt4 key购买 nike

    我有一个自动完成表单,用户可以在其中输入一个术语,它会隐藏所有 <li>不包含该术语的元素。

    我最初遍历了所有 <li>使用 jQuery 的 each并应用 .hide()那些不包含该术语的。这太慢了。

    我发现一个更快的方法是遍历所有<li>并申请类(class).hidden所有需要隐藏的,然后在循环结束时做 $('.hidden').hide() .不过,这感觉有点老套。

    可能更快的方法是重写 .hidden 的 CSS 规则类使用 document.styleSheets .谁能想到更好的方法?

    编辑:让我澄清一些我不确定有多少人知道的事情。如果您在循环的每次迭代中更改 DOM,并且该更改会导致重新绘制页面,那么这将比“准备”所有更改并在循环完成时立即应用它们要慢得多。

    最佳答案

    当您处理数千个项目时,DOM 操作很慢。遍历许多 DOM 元素并根据该元素的特性操作每个元素通常不是一个好主意,因为这涉及在每次迭代中对 DOM 方法的多次调用。如您所见,它真的很慢。

    更好的方法是将您的数据 与 DOM 分开。搜索 JS 字符串数组的速度提高了几个数量级。

    这可能意味着将您的数据集加载为 JSON 对象。如果那不是一个选项,您可以遍历 <li> s 一次(在页面加载时),并将数据复制到数组中。

    现在您的数据集不依赖于存在的 DOM 元素,您可以简单地替换 <ul> 的全部内容。使用 .html()每次用户输入。 (这比 JS DOM 操作快得多,因为浏览器可以在您简单地更改 innerHTML 时优化 DOM 更改。)

    var dataset = ['term 1', 'term 2', 'something else', ... ];

    $('input').keyup(function() {
    var i, o = '', q = $(this).val();
    for (i = 0; i < dataset.length; i++) {
    if (dataset[i].indexOf(q) >= 0) o+='<li>' + dataset[i] + '</li>';
    }
    $('ul').html(o);
    });

    As you can see , 这非常快。


    但是请注意,如果您 up it to 10,000 items ,性能开始受到前几次击键的影响。这与插入到 DOM 中的结果数量有关,而不是与要搜索的项目的原始数量有关。 (当您输入的内容越多,要显示的结果越少时,性能会很好 – 即使它仍在搜索所有 10,000 个项目。)

    为避免这种情况,我会考虑将显示的结果数量限制在一个合理的范围内。 (1,000 似乎和任何一个一样好。)这是自动完成的;没有人真正查看所有结果——他们会继续输入,直到结果集可以被人类管理为止。

    关于javascript - 隐藏数千个 <li> 元素的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11925318/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com