JQuery 选择框和循环帮助

2024-03-10

谢谢阅读。我对 jQuery 有点陌生,我正在尝试制作一个可以包含在我所有网站中的脚本来解决一个总是让我发疯的问题......

问题: 带有长选项的选择框在 Internet Explorer 中会被截断。例如,这些选择框:http://discoverfire.com/test/select.php http://discoverfire.com/test/select.php

在 Firefox 中,它们很好,但在 IE 中,选项在下拉时会被截断为选择的宽度。

解决方案: 我想要做的是创建一个脚本,我可以将其包含在将执行以下操作的任何页面中:

  1. 循环浏览页面上的所有选择。

  2. 对于每个选择: A. 循环遍历其选项。 B. 找出最长选项的宽度。 C. 绑定一个函数以将选择范围扩展到焦点上的宽度(或者单击...)。 D. 绑定一个函数以在模糊时缩小到其原始宽度。

我已经成功地为一个选择框完成了第 2 步的大部分操作。

我发现获取选项宽度是一个问题(尤其是在 IE 中),因此我循环遍历并将每个选项的文本复制到一个跨度,测量跨度宽度,并使用最长的一个作为选择将扩展到的宽度。也许有人有更好的主意。

这是代码

<script type='text/javascript'>

      $(function() {

         /*
         This function will:
            1. Create a data store for the select called ResizeToWidth.
            2. Populate it with the width of the longest option, as approximated by span width.

         The data store can then be used
         */
         // Make a temporary span to hold the text of the options.
         $('body').append("<span id='CurrentOptWidth'></span>");

         $("#TheSelect option").each(function(i){

            // If this is the first time through, zero out ResizeToWidth (or it will end up NaN).
            if ( isNaN( $(this).parent().data('ResizeToWidth') ) ) {
               $(this).parent().data( 'OriginalWidth', $(this).parent().width() );
               $(this).parent().data('ResizeToWidth', 0);

               $('CurrentOptWidth').css('font-family', $(this).css('font-family') );
               $('CurrentOptWidth').css('font-size', $(this).css('font-size') );
               $('CurrentOptWidth').css('font-weight', $(this).css('font-weight') );

            }

            // Put the text of the current option into the span.
            $('#CurrentOptWidth').text( $(this).text() );

            // Set ResizeToWidth to the longer of a) the current opt width, or b) itself. 
            //So it will hold the width of the longest option when we are done
            ResizeToWidth = Math.max( $('#CurrentOptWidth').width() , $(this).parent().data('ResizeToWidth') );

            // Update parent ResizeToWidth data.
            $(this).parent().data('ResizeToWidth', ResizeToWidth)

          });

         // Remove the temporary span.
         $('#CurrentOptWidth').remove();

         $('#TheSelect').focus(function(){
            $(this).width( $(this).data('ResizeToWidth') );
         });

         $('#TheSelect').blur(function(){
            $(this).width( $(this).data('OriginalWidth') );
         });


           alert( $('#TheSelect').data('OriginalWidth') );
           alert( $('#TheSelect').data('ResizeToWidth') );

      });


   </script>

并选择:

<select id='TheSelect' style='width:50px;'>
   <option value='1'>One</option>
   <option value='2'>Two</option>
   <option value='3'>Three</option>
   <option value='42,693,748,756'>Forty-two billion, six-hundred and ninety-three million, seven-hundred-forty-some-odd..... </option>
   <option value='5'>Five</option>
   <option value='6'>Six</option>
   <option value='7'>Seven...</option>
</select>

如果您想运行它,希望它能为您运行,或者您可以在此处查看它的运行情况:http://discoverfire.com/test/select.php http://discoverfire.com/test/select.php.

我需要什么帮助: 这需要一些改进,但如果您指定选择框,似乎可以正常工作。

但是,我似乎无法弄清楚如何将其应用到带有循环的页面上的所有选择框。到目前为止,我有这个:

$('select').each(
   function(i, select){
      // Get the options for the select here... can I use select.each...?
   }
);

另外,是否有更好的方法来获取每个选择的最长选项的长度?跨度很接近,但不是很精确。问题是 IE 对于实际选择的选项宽度返回零。

任何想法都非常受欢迎,无论是对于提出的问题还是对我的代码的任何其他改进。

Thanks!!


要修改每个选择,请尝试以下操作:

$('select').each(function(){

  $('option', this).each(function() {
    // your normalizing script here

  })

});

第二个 jQuery 调用的第二个参数 (this) 限定了选择器('option')的范围,因此它本质上是“此选择中的所有选项元素”。如果未提供,您可以认为第二个参数默认为“文档”。

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

JQuery 选择框和循环帮助 的相关文章

  • 使用 jqGrid 的 ASP.NET MVC 路由

    我正在尝试创建一个指向 url 的链接 例如首页 详情 1在 jqGrid 列中 文档显示 showlink baseLinkUrl showAction show addParam key 2 注意 addParam 应该包含 例如 格式
  • 如何使事件 DOM 侦听器适应 Google Maps JavaScript API v3.35

    我曾经使用以下代码来捕获用户的 Enter 键事件 如果用户没有选择其中任何一个 即没有标记为 pac 的 pac item 则自动从自动完成结果 pac items 中选择第一个结果 项目选择 var input document get
  • 如何编写三元运算符(又名 if)表达式而不重复自己

    例如 这样的事情 var value someArray indexOf 3 1 someArray indexOf 3 0 有更好的写法吗 再说一遍 我并不是在寻求上述问题的答案 只是一个在三元运算符表达式中可能重复操作数的示例 就我个人
  • JavaScript 闭包与匿名函数

    我和我的一个朋友目前正在讨论 JS 中什么是闭包 什么不是 我们只是想确保我们真正正确地理解它 我们以这个例子为例 我们有一个计数循环 想要在控制台上延迟打印计数器变量 因此我们使用setTimeout and closures捕获计数器变
  • 使用 html2canvas 将 highcharts 图表渲染为 pdf 在 IE 和 Firefox 上不起作用

    我们使用 html2canvas js 和 html2canvas svg js 版本 0 5 0 beta1 以及 highcharts js 将圆环图下载为 pdf 这在 Chrome 中按预期工作 但在 IE 和 Firefox 中不
  • SVG/XML 中有一些innerHTML 替代品吗?

    在 HTML 中 我可以通过提供字符串形式的模板来构建一个简单的模板系统 替换其中的某些部分 然后使用innerHTML到某个容器 var templ span myText span var newContent templ replac
  • 如何从 OnChange 事件捕获文本框的值

    在我的 C MVC 应用程序中 我有一系列这样生成的文本框 foreach object item in items Html TextBox 渲染的结果是一系列看起来像这样的文本框
  • 使用HTMLWebpackPlugin时如何通过webpack加载图片?

    我正在使用 HTMLWebpackPlugin 在我的模板中我有一个 img 标签 img src images logo png 如果您注意到 这里我使用相对路径 认为 webpack 将触发在 webpack config js 文件中
  • 弹出窗口显示来自 php 和 javascript 的结果

    我正在尝试实现 javascript 来显示 php 的结果 基本上 我有一个登录页面 对于登录失败 我希望结果显示在弹出窗口中 而不是仅仅用 php 回显它们 我尝试实现警报框 但看起来我错过了一些东西 成功登录将被重定向到logged
  • Chrome 的萤火虫

    谁能推荐一个类似于 Firebug 的不错的 Google Chrome 扩展程序 我确实看到这里有几个类似的问题 但答案似乎非常过时 Thanks It s built in Press Ctrl Shift I Or Tools gt
  • 使用 var 与 let/const 进行块级变量重新声明

    Part 1 给出这个例子 var number 10 var number 42 console log number 42 为什么第 4 行不抛出Uncaught SyntaxError Identifier number has al
  • 如何在 jQuery 中检查 null 对象

    我正在使用 jQuery 我想检查页面中是否存在某个元素 我写了以下代码 但它不起作用 if btext i null alert btext i text btext i text Branch i 如何检查元素是否存在 检查jQuery
  • 避免使用 Grunt cssmin 任务来删除重复条目

    在我的 Gruntfile 中 我使用 cssmin grunt contrib cssmin 任务 就像是 cssmin css src dist styles css dest dist styles min css 问题是 style
  • 同步 jQuery 动画

    我正在尝试同时获得淡入 不透明度切换 和边框淡入 使用jquery 动画颜色 http www bitstorm org jquery color animation 同时开火 但我遇到了一些麻烦 有人可以帮忙查看以下代码吗 fn exte
  • JSON 和 AJAX 与 jQuery 有什么区别?

    我听说 JSON 会序列化所有数据 这可以防止我在跨浏览器支持等方面遇到客户端问题 我一直在使用 AJAX 和 jQuery 这看起来很简单 但我不确定其中的区别 我读过我也可以使用它来获取数据 ajax url url dataType
  • 无法定义 set 和 get 方法

    尝试使用访问器定义属性时出现错误 这是我的代码 var person Object defineProperty person birthYear value 1997 writable true enumerable true confi
  • 从 BLOB 打印 PDF

    我从外部 API 获取 PDF 文件 使用此代码我可以正确下载该文件 var req new XMLHttpRequest req open POST url true req responseType blob req setReques
  • 使用 JavaScript 在空闲时隐藏鼠标光标

    是否可以使用JavaScript来设置cursor属性的属性none如果鼠标在一定时间内处于非活动状态 例如五秒 请将其设置回auto当它再次活跃时 EDIT 我意识到none不是有效值cursor财产 尽管如此 许多网络浏览器似乎都支持它
  • 查找 div 元素中的所有链接并禁用它们

    假设我有一些如下所示的 HTML 元素 div span a href some link Click me a span div Hello everybody Click a href some link else me a to do
  • 如何找到我的 typescript/react 模块的声明?

    我对前端技术非常 非常 陌生 特别是 React 和 TypeScript 当尝试做一件简单的事情 即使用反应组件时 我的问题出现了https github com ckeditor ckeditor5 https github com c

随机推荐

  • 具有重复值和后缀的列表

    我有一个清单 a a a b c 并且需要使用后缀重复一些值 ind这样添加 顺序很重要 a a ind b b ind c c ind I tried b x x ind for x in a c item for sublist in
  • python中的Turtle模块未导入[重复]

    这个问题在这里已经有答案了 这是我第一次在 python 中使用turtle模块 但我似乎无法导入它 这是我的代码 from turtle import pen1 Pen pen2 Pen pen1 screen bgcolour 2928
  • 将重复项移动到已排序数组的末尾

    我在一次采访中被问到这个问题 有一个包含重复项的已排序数组 目标是首先返回具有唯一元素的数组 并在最后返回重复的元素并保持顺序 例如 1 1 2 3 4 4 5 应该成为 1 2 3 4 5 1 4 我能够用额外的空间 O n 空间 和线性
  • 在 python3 中使用用户设置的密码进行正确的数据加密

    我一直在寻找合适的数据加密库 用python好久了 今天又需要了 不行 找到任何东西 那么有什么方法可以使用 用户设置的密码 如果我发现一些通常不安全的东西 如果我找到一个好的解决方案 它不支持用户设置密码 这意味着我被困住了 有什么办法吗
  • 在代码片段库中添加代码片段 (Xcode 10)

    最近我在使用的时候Xcode 10 测试版 3 我尝试过了制作一个代码片段并将其添加到代码片段库中 But the 由于代码片段库在 Xcode 10 中分离 因此无法进行拖放 并在我单击代码时隐藏 如何在 Xcode 10 的代码片段库中
  • yocto 中图像版本控制的最佳方法

    在 Yocto 中维护映像版本的最佳方法是什么 我的意思是假设我们构建一个图像并将其提供给客户 将来我们会向客户提供错误修复 我们如何知道客户正在使用哪个版本的 yocto 图像 有没有任何标准方法可以实现这一点 谢谢你的时间 赞赏你的努力
  • 在 for 循环中使用 bash wait [重复]

    这个问题在这里已经有答案了 我已经搜索过并期望以前有人问过这个问题 但找不到类似的问题 尽管有很多类似的问题 我希望这个 for 循环在 3 个不同的线程 进程中运行 并且wait似乎是正确的命令 for file in 1 txt 2 t
  • 我的实体加载速度超慢有什么问题吗?

    我有以下实体 Entity Table name Order public class Order Id SequenceGenerator name order id seq sequenceName order id seq alloc
  • std::tuple 与 std::array 作为 std::vector 的项

    我有这样一个案例 std vector lt 4 integers gt v 什么最适合这里 std tuple解决方案 std vector
  • JIT 编译器在角度更新后不可用

    我已经从 Angular 更新了 Angular 应用程序10到有角度的12 更新开发模式后工作正常 但在生产构建中我得到了 JIT compiler unavailable 错误 我已经进口了 angular compiler 在里面ma
  • xpath 在 div 元素中查找伪元素 ::after 且不带任何内容

    我正在尝试编写 xpath 来查找是否选中了一个复选框 该复选框正在使用 css after 元素进行更改 以下是我拥有的两个元素 div class FormBlock formItem2 and text Scoped In div c
  • 如何在 numpy Python 中启用和禁用 Intel MKL?

    我想测试和比较使用英特尔 MKL 和不使用英特尔 MKL 的 Numpy 矩阵乘法和特征分解性能 我已经使用安装了 MKLpip install mkl Windows 10 64 位 Python 3 8 然后我使用了来自的例子here
  • 范围内的最低值

    我想找到某个范围内的最低值 我每次都必须迭代数组还是有任何动态方法 假设我有输入数组 index 0 1 2 3 4 5 6 7 value 1 4 6 1 6 7 2 3 然后我必须选择范围 包括 中最小的 例如 min 0 7 1 mi
  • 将 MathML 复制到 Word 中以用作方程

    我可以成功地将使用 MS Word 2013 中的插入方程工具创建的方程以 MathML 格式复制到剪贴板 以便在其他地方使用 不过我主要需要导入到Word中 有没有办法将MathML格式的方程导入到word中作为方程使用 您是否刚刚尝试粘
  • 当我将 FusionTablesLayer 与 Google Maps JavaScript API v3 结合使用时出现空白页

    我使用融合表的数据准备了一个简单的页面 FusionTablesLayer 与 Google Maps JavaScript API v3 但不显示地图 您可以在此处查看该页面 http www siterary com 0test htm
  • Xamarin Forms 图像大小不匹配

    我正在使用 Xamarin Forms 实现一个跨平台应用程序 但我遇到了一个奇怪的错误 我正在尝试创建一个带有文本的按钮 为了实现它 我正在使用AbsoluteLayout 我已为每种 iOS 分辨率类型 png 2x png 3x pn
  • System.InvalidCastException:对象无法从 DBNull 转换为其他类型

    我的代码中有一个例外 我已经尝试将 int64 更改为 int32 但这并没有改变它 在数据库中 表示 column ID 的单元格的数据类型为 NUMBER 问题出在这段代码的第 7 行 private void dataGridView
  • 如何将 numpy.array 作为新列添加到 pyspark.SQL DataFrame 中?

    这是创建 pyspark sql DataFrame 的代码 import numpy as np import pandas as pd from pyspark import SparkContext from pyspark sql
  • 如何使 geom_line 和 geom_point 抖动相同的幅度?

    我有一个ggplot2具有显着重叠的两条线的折线图 我正在尝试使用position jitterdodge 这样它们就更明显了 但我无法以相同的方式让线条和点都抖动 我试图仅水平抖动点和线 因为我不想建议 y 轴上的任何更改 这是一个 MW
  • JQuery 选择框和循环帮助

    谢谢阅读 我对 jQuery 有点陌生 我正在尝试制作一个可以包含在我所有网站中的脚本来解决一个总是让我发疯的问题 问题 带有长选项的选择框在 Internet Explorer 中会被截断 例如 这些选择框 http discoverfi