隐藏数千个
  • 元素的最快方法?
  • 2024-04-13

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

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

    我发现更快的方法是循环遍历所有<li>并申请班级.hidden所有需要隐藏的内容,然后在循环结束时执行$('.hidden').hide()。但这感觉有点hackish。

    一种可能更快的方法可能是重写 CSS 规则.hidden类使用document.styleSheets。有人能想到更好的方法吗?

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


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

    更好的方法是保持你的data与 DOM 分开。搜索 JS 字符串数组的速度要快几个数量级。

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

    现在您的数据集不依赖于存在的 DOM 元素,您可以简单地替换 DOM 元素的全部内容<ul> using .html()每次用户键入时。 (这比 JS DOM 操作要快得多,因为当你只需更改innerHTML.)

    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);
    });
    

    如你看到的 http://jsfiddle.net/josh3736/uaSMq/,这速度非常快。


    但请注意,如果您最多 10,000 件商品 http://jsfiddle.net/josh3736/uaSMq/3/,在前几次击键时性能开始受到影响。这与插入到 DOM 中的结果数量比与搜索的原始项目数量更相关。 (当您输入的内容越多,要显示的结果越少,性能就很好 - 即使它仍在搜索所有 10,000 个项目。)

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

    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

    隐藏数千个
  • 元素的最快方法? 的相关文章
    • React Native 无法访问 Cloud Firestore 后端

      我之前使用的是 firebase 实时数据库 但现在想切换到 Cloud Firestore 但即使经过身份验证 也会收到以下错误 我目前正在使用 Android Simulator 尝试禁用我的实时数据库 但找不到解决方案 Firebas
    • 使用 babel env 预设时,展开运算符出现语法错误

      我正在努力 现代化 meern io 入门样板 https github com Hashnode mern starter通过替换巴别塔es2015 and stage 0预设为env 然而 似乎env预设无法识别以下片段client m
    • 从 puppeteer PDF 中删除分页符?

      我目前正在尝试查看是否有一种方法可以删除我的 puppeteer PDF 中的分页符 因为我当前的 PDF 设置中的一些分页符正在以一种奇怪的方式切断文本 我正在谈论的内容的屏幕截图 我的傀儡代码 app get companyId pdf
    • 我可以使用 jQuery 的 AJAX 将表单信息提交到 Google Spreadsheets 吗?

      我喜欢能够使用谷歌电子表格 但以视觉方式集成到我的网站中很棘手 所以我想我会重新创建他们的表单 一个简单的剪切 粘贴 通过 AJAX 提交表单 数据将转到电子表格 我可以将我的用户重定向到比谷歌默认的 谢谢你所做的一切 更漂亮的东西你刚刚做
    • 无需重定向的 HTML 页面提交

      有没有什么方法可以在不使用ajax的情况下提交html表单而无需从当前页面重定向 你可以设置一个target 为您form 这样您就可以将表单提交到新选项卡 target blank 或一个小的 隐藏的iframe target nameo
    • R 中 optim() 的优化(L-BFGS-B 需要“fn”的有限值)

      我在 R 中使用 optim 来求解涉及积分的可能性时遇到一些问题 我收到一条错误消息 optim par c 0 1 0 1 LLL method L BFGS B lower c 0 L BFGS B 需要 fn 的有限值 中的错误 下
    • 指定 HTML5 输入类型 = 日期的值输出?

      我想将本机日期选择器添加到我的应用程序中 该应用程序当前使用遗留的本地系统 日期输入支持尚未广泛普及 但如果我可以基于兼容性提供这两种实现 那就太理想了 有没有办法指定 HTML 日期选择器给出的值的输出 歌剧的默认设置是yyyy mm d
    • 替换img路径jquery

      我正在尝试替换 jquery 中的 img 路径 注入远程页面 replaceexample com thumbs withexample com images 我已经尝试过这个 但似乎不起作用 img attr src replace t
    • 是否有跨浏览器的方式在Javascript中设置style.float?

      通常 如果您需要在 JavaScript 中设置样式属性 您可以这样说 element style attribute value 虽然略有不同 但属性名称通常与 HTML 属性名称类似 尽管是驼峰式 对我来说问题是 float 属性不起作
    • 使用 eval 时不会受到 XSS 威胁

      我正在制作 不是现在 但我仍然对这个感到好奇 一款使用 HTML5 和 JS 的游戏 我想要的是人们可以插入自定义脚本 但要安全 function executeCustomJS code eval code bad 当然这段代码非常糟糕
    • 即使我的情况按预期发生变化,Angular ngClass 也不会更新我的课程

      我正在创建的模板中有类似的内容 div class nng 3 div 价值app layout isNavbarFixed等用零或一初始化 并且页面第一次加载时 适当的类被插入到我的div 不过 此后通
    • “$(document).ready”函数的替代方案

      我在 aspx 页面中使用 fancybox 对于灯箱 文档就绪功能在此页面中不起作用 有人告诉我编写一个新的 JavaScript 代码来加载该页面中的灯箱 包括 jQuery 检查网络选项卡 确保您没有收到 404 检查控制台是否没有收
    • 基本 jQuery 动画:省略号(三个点依次出现)

      我需要的 我需要一个动画省略号 一个点一个接一个地出现 动画需要循环播放 我想通过 jQuery 实现这一点 动画序列 Frame 1 等待您的选择 Frame 2 等待您的选择 Frame 3 等待您的选择 Frame 4 等待您的选择
    • chrome 选项卡/窗口中的 window.open 行为

      我有一小段 javascript 旨在打开两个或更多选项卡 这在 FF 和 IE 中工作正常 但 chrome 会在新窗口而不是选项卡中打开第二个窗口 它不依赖于 url 因为我已经尝试过使用两个相同的 url 第一个在选项卡中打开 第二个
    • JavaScript setTimeout 和更改系统时间会导致问题

      我注意到如果我设置setTimeout未来1分钟 然后将我的系统时间更改为过去5分钟 setTimeout功能将在 6 分钟后触发 我这样做是因为我想看看夏令时系统时钟更改期间会发生什么 我的 JavaScript 网页使用setTimeo
    • eventSources 到事件 Json,完整日历

      我正在尝试从 eventSources 获取 json 调用到我的事件 我在 eventSources 中返回的 json 是 title Title Test start 1305841052 当我将此字符串传递到事件中时 它会正确显示日
    • 加载 Angular 库时,IE9 和 IE10 中出现 Angular JS“SCRIPT5007:预期对象”错误

      我正在开发一个 AngularJS 应用程序 该应用程序应在 Firefox IE 9 和 IE 10 上运行 我使用最新版本的 angularjs 库 现在是 1 3 15 服务器端是在JavaEE平台上用Java编写的 服务器运行在Gl
    • Radiobutton-带有纯 html/css 的按钮

      是否可以创建像这样的单选按钮JQuery http jqueryui com demos button radio那些 用纯html css thanks 试试这个小提琴 http jsfiddle net mcXm7 1 http jsf
    • jQuery appendTo(), json 在 IE 6,7,8 中不起作用

      我这两天绞尽脑汁想找到解决办法 我使用 jQuery ajax 从数据库中获取值 以便在另一个框发生更改时更新一个框 php 脚本从数据库中获取值 然后输出 json 它在 FF 中工作正常 但在所有版本的 IE 中 选择框都不会更新 我已
    • 使用 numpy 加速 for 循环

      下一个 for 循环如何使用 numpy 获得加速 我想这里可以使用一些奇特的索引技巧 但我不知道是哪一个 这里可以使用 einsum 吗 a 0 for i in range len b a numpy mean C d e f b i

    随机推荐