如何加快 jquery :selected 选择器的速度?

2024-02-27

我的网页中有一个下拉列表,其中包含 3830 个元素。我知道,有点过分,但无论如何。

在 jquery 中,我使用以下语句获取所选选项值:

$( "#institutionCombo :selected" ).val();

在找到选择之前有一个明显的停顿。一旦获得该值,我会将其插入页面上的文本框中,这样我就知道有多快。另外,我已经使用 Firebug 中的断点对其进行了检查。

如果我使用老方法并使用这个 javascript:

var div = document.getElementById( "maindiv" );
var select = div.getElementsByTagName( "select" )[ 0 ];
var ix = select.selectedIndex;
var instId = select.options[ ix ].value;

这个速度是瞬间的。

jquery 中是否有继承的东西使得 :selected 选择器在数字太高时变得如此缓慢?我想在我的脚本中始终坚持使用 jquery,有没有人建议加快在 jquery 中查找所选选项的速度?

Thanks,

Craig


获取选择框的值时无需调用 :selected 。

默认行为是获取 selectedIndex

$( "#institutionCombo").val();

正如评论中所述,如果您需要访问该选项的文本,您可以使用

$( "#institutionCombo option[value=" + $( "#institutionCombo").val(); + "]").text();

尽管如果您知道需要 text 属性并且它与值不同,您可能只想直接使用 selectedIndex 。

var combo = $("#institutionCombo").get(0); 
combo = combo ? combo : {selectedIndex: -1}; // handle no combo returned
if (combo.selectedIndex < 0)
  return; // nothing selected
$('#institutionCombo option:eq(' + combo.selectedIndex + ')').text()

这是 jquery 源代码 (v1.3) 的片段

val: function( value ) {
    // ...  
    // We need to handle select boxes special
    if ( jQuery.nodeName( elem, "select" ) ) {
        var index = elem.selectedIndex,
            values = [],
            options = elem.options,
            one = elem.type == "select-one";

        // Nothing was selected
        if ( index < 0 )
            return null;

        // Loop through all the selected options
        for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
            var option = options[ i ];

            if ( option.selected ) {
                // Get the specifc value for the option
                value = jQuery(option).val();

                // We don't need an array for one selects
                if ( one )
                    return value;

                // Multi-Selects return an array
                values.push( value );
            }
        }

        return values;  
    // ...  
},

当您调用 :selected 选择器时,它将循环遍历所有 select 元素的后代,寻找要设置的 .selected 属性,并将返回一个包含任何元素的数组。无论哪种方式,它都会循环所有后代,所以不要这样做。

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

如何加快 jquery :selected 选择器的速度? 的相关文章

  • Java 增强型 For-Loop 比传统的更快?

    所以我的理解是 增强的 for 循环应该更慢 因为它们必须使用迭代器 但是我的代码提供了混合结果 是的 我知道循环逻辑占用了循环中花费的大部分时间 对于少量迭代 100 1000 增强的 for 循环在使用和不使用 JIT 的情况下似乎都要
  • 最有用的 jQuery 原生 API 函数

    前 5 10 个最常用的 jQuery 本机 API 函数是什么 请不要建议 jQuery 函数本身 因为毫无疑问这是最常用的函数 如果可能的话 还请提供它们所涵盖的场景 提出这个问题的原因是我尝试创建一个类似 jQuery 的 API充足
  • 如何在延迟加载期间在图像占位符顶部显示“正在加载”gif 图像

    我正在使用这个 jQuery 插件来延迟加载我的图像 惰性加载器 http www appelsiini net projects lazyload 它运行良好 我只想在所有尚未加载的图像之上显示一个 正在加载 图像 可能是 gif 当图像
  • 有条件减少 CUDA

    我需要总结一下100000值存储在数组中 但带有条件 有没有办法在 CUDA 中做到这一点以快速产生结果 任何人都可以发布一个小代码来做到这一点吗 我认为 要执行条件约简 您可以直接将条件引入为乘法0 假 或1 真 加数 换句话说 假设您希
  • jQuery() 与 jQuery.parseHtml() 空格语法错误

    我有一行 javascript 导致 jQuery 中出现语法错误 document find Container replaceWith data find Content 代码本身如果相当无害的话 它所做的只是从 ajax 调用获取响应
  • Bootstrap $('#myModal').modal('show') 不起作用

    我不知道为什么 但所有模态功能都不适用于我 我检查了版本和负载 它们都很好 我不断收到此错误消息 Uncaught TypeError modal is not a function 对于隐藏我已经找到了替代方案 代替 myModal mo
  • 有没有好的 Clojure 基准测试?

    Edit Clojure 基准测试已达到基准游戏 http benchmarksgame alioth debian org u64q clojure html 我已经制作了这个问题社区维基并邀请其他人保持更新 有人知道 Clojure 性
  • 如何在全日历中显示从数据库中获取事件的时间

    你好朋友在我的应用程序中 我真的制作了一个弹出页面 它在数据库中插入事件 并从数据库中获取事件 但事件没有按时间显示数据 读取有一系列事件 其中包含 eventid eventtitle start end 和格式类似数组 id 10 ti
  • 用 Ajax 响应替换 div 的内部 HTML

    我试图在一段时间后更改 div 的内部 HTML 我得到了我想要的 Ajax 正确响应 但无法用 Ajax 响应替换所选内容的内部 HTML 我的代码有什么问题 Html p class time ui li desc 51 seconds
  • 计算单词和字符[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我一直在寻找使用 jQuery 将单
  • Anythingslider 触摸滑动功能可阻止 IOS 和平板设备上链接的正常点击

    我正在将任何滑块 jquery 插件与触摸事件一起使用 它似乎在所有设备上都能按预期工作 允许用户通过触摸平板电脑和 iOS 设备以及在桌面上使用鼠标来 滑动 slider anythingSlider Callback when the
  • 防止用户在 javascript 中离开我的页面

    在我的表单中 我有一个不显眼的情态 如果用户单击我的 离开图像 我会打开模式并询问他是否想离开 如果用户同意 JavaScript Jquery 是否可以 停止 重新加载或页面更改以显示我的模式并继续操作 重新加载 下一页 上一页等 I t
  • 为什么在 CSS3 中启用硬件加速会降低性能?

    我在 css3 实验中将 10 000 个小 div 元素从浏览器视口的顶部移动到底部 对于此测试 我使用两种不同的方法 使用 GPU 加速translate3D x y z or translateZ 0 无需 GPU 加速 只需调整to
  • innerHTML 未写入 svg 组 Firefox 和 IE

    我正在做一个项目 遇到了障碍 在 Chrome 中 它按预期工作 但在 Firefox 和 IE 中则不然 下面的代码实际上只是真实项目代码的非常简化的版本 基本上我正在尝试替换 svg 的每组中的圆圈 因此 我从预编码的圆圈开始 然后删除
  • 如何取消 jquery.load()?

    当 load 在 5 秒内没有返回时 我想取消 load 操作 如果是这样 我会显示一条错误消息 例如 抱歉 没有加载图片 我所拥有的是 超时处理 jQuery fn idle function time postFunction var
  • 如何让 JQuery UI 自动完成与项目 id 配合使用

    我在这里看到了这篇文章 带有项目和 ID 的 jQuery UI 自动完成 https stackoverflow com questions 4815330 jquery autocomplete with item and id但我无法
  • iOS 6 上的 Safari 是否缓存 $.ajax 结果?

    自从升级到 iOS 6 以来 我们看到 Safari 的网页视图擅自缓存 ajax来电 这是在 PhoneGap 应用程序的上下文中 因此它使用 Safari WebView 我们的 ajax电话是POST方法并且我们将缓存设置为 fals
  • 无法禁用 jQuery 缓存

    Update 我发现这一定是缓存问题 但我无法关闭缓存 这是我更改后的脚本
  • jquery 检查某人何时开始在字段中输入

    a next click function var tags input name tags if tags val tags addClass hightlight return false else tags removeClass h
  • Jquery 脚本可以在 JSfiddle 中运行,但不能在 html 页面上运行

    我创建了一个JSFiddle http jsfiddle net defjam64 w4sGZ 4 其按预期工作 Jquery script function icon hover gcp icon hover function gcp i

随机推荐