select控件在标准浏览器下可以直接innerHTML设置内容,IE则不行。

HTML结构:

<form name="form1">
<select name="select1"></select>
</form>

先看直接使用select.innerHTML

var form = document.forms["form1"];
var select = form["select1"];
select.innerHTML = '<option value="1">1</option>';

运行发现标准浏览器如chrome, firefox运行正常,DOM树为

IE(678)全家都呵呵了:

原因在于IE使用innerHTML给select赋值时会根据/^<\w\d['" ]>&/(尖括号中间的字母、数字,引号,空格)匹配的字符都干掉,无力吐槽。

2种解决思路

1、使用select的outerHTML或者父级的innerHMTL

var select = document.forms["form1"]["select1"];
select.outerHTML = '<select name="select1"><option value="1">1</option></select>';

outerHMTL IE系列和chrome是支持的,新版的FireFox也支持,国内Firefox浏览器份额低的可以忽略不计。如果嫌弃outerHTML,当然可以换innerHTML

document.forms["form1"].innerHTML = '<select name="select1"><option value="1">1</option></select>';

简单暴力

2、使用new Option创建select的options,这是比较推荐的方法。

    var form = document.forms["form1"];
var select = form["select1"];
select.options.add(new Option("text", "value")); // 或 select.add(new Option("text", "value"))

new Option创建一个option对象实例,依次接受text,value两个参数,text为option的文本值,value即为option的value值。

发散思维,几种常见的option操作做个汇总:

    var form = document.forms["form1"];
var select = form["select1"]; // 增加
select.options.add(new Option("text1", "value1")); // 或 select.add(new Option("text1", "value1"))
select.options.add(new Option("text2", "value2")); // 或 select.add(new Option("text2", "value2")) // 删除选中项,也可指定删除
var index = select.options.selectedIndex;
select.options.remove(select.index); // 或 select.remove(select.index) // 全删
select.options.length = 0; // 改text
select.options[select.selectedIndex].text = "text3";
// 改value
select.options[select.selectedIndex].value = "value3";
// 同时修改text | value
select.options[select.selectedIndex] = new Option("text3", "value3"); // 查
var text = select.options[select.selectedIndex].text;
var value = select.options[select.selectedIndex].value;

select设置innerHMTL的更多相关文章

  1. input与select 设置相同宽高,在浏览器上却显示不一致,不整齐

    遇到 input与select 设置相同宽高,在浏览器上却显示不一致,遂实验了下(IE 10.013 ,Firefox 30.0),得出以下结论 input   width,height 值里面, 不 ...

  2. Go基础系列:为select设置超时时间

    Go channel系列: channel入门 为select设置超时时间 nil channel用法示例 双层channel用法示例 指定goroutine的执行顺序 After() 谁也无法保证某 ...

  3. AngularJS的select设置默认值

    AngularJS的select设置默认值 在使用Angular时候使用select标签时会遇到绑定数据指定默认显示值可这样实现 <!DOCTYPE html> <html ng-a ...

  4. select设置高度的兼容问题

    在IE678下,我们给select设置高度的话,里面的option无法居中,折中的兼容方式就是,我们给select的border:0:外面套一层div,这个div给他设置padding,让select ...

  5. vue中select设置默认选中

    vue中select设置默认选中 一.总结 一句话总结: 通过v-model来:select上v-model的值为option默认选中的那项的值(value) 二.select设置默认选中实例 < ...

  6. 为select 设置样式

    问题: 在为表单添加下拉菜单时,有时候对菜单的样式没有特别的要求,就是需要修改下select元素的宽度和高度,但众所周知select元素的样式很难修改: select在各个浏览器,字体大小为14px时 ...

  7. easyui-combobox select 设置不分行(只显示在一行)

    使用easyui 1.4.4 <select id="hotalid" class="easyui-combobox" data-options=&quo ...

  8. select设置text的值选中(兼容ios和Android)基于jquery

    前一段时间改了一个bug,是因为select引起的.当时我没有仔细看,只是把bug改完了就完事了,今天来总结一下. 首先说option中我们通常会设置value的属性的,还有就是text值的,请参见下 ...

  9. 使用ant design组件时,Select设置mode="multiple"或mode="tags"时遇到问题:Uncaught Error: must set key for <rc-animate> children

    import {Select} from 'antd'; <Select className={styles.edit_area_dialog_table_select_input_layout ...

随机推荐

  1. BZOJ2194 快速傅立叶之二 【fft】

    题目 请计算C[k]=sigma(a[i]*b[i-k]) 其中 k < = i < n ,并且有 n < = 10 ^ 5. a,b中的元素均为小于等于100的非负整数. 输入格式 ...

  2. P1558 色板游戏 (线段树)

    题目链接 Solution 一个简单的 或 线段树.竟然坑了我一个小时... 因为颜色很小,所以把状态压起来. 然后每个节点上的数值代表当前颜色状态. 然后节点合并很简单,直接或起来. 需要注意一下的 ...

  3. 【CCF】除法 树状数组

    [AC] #include<iostream> #include<math.h> #include<cstring> using namespace std; ty ...

  4. Python之面向对象:封装

    1.封装的概念 将对象的数据与操作数据的方法相结合,通过方法将对象的数据与实现细节保护起来,就称为封装.外界只能通过对象的方法访问对象,因此封装同时也实现了对象的数据隐藏. 在使用面向对象的封装特性时 ...

  5. 适配IPhone X的技巧

    #define TabbarHeight ([[UIApplication sharedApplication] statusBarFrame].size.height>20?83:49) // ...

  6. DOS的一些常用命令

    原文发布时间为:2011-02-12 -- 来源于本人的百度文章 [由搬家工具导入] DOS远程桌面连接命令 mstsc /v: 192.168.1.250 /console cmd        运 ...

  7. 阿里巴巴Java开发手册公开版(转)

    1.不要嫌名字长 无论是方法,变量,还是函数的取名,不要嫌弃名称太长,只要能够表示清楚含义就可以了. 2.String[] args而不是String args[] 中括号是数组类型的一部分,数组定义 ...

  8. Ubuntu中配置Tomcat与Eclipse整合

    Apache Tomcat 作为web服务器已经广泛用于Java Servlets 和 JSP (Java Server Pages) 开发. 环境:Ubuntu10.10 java环境的配置见另一篇 ...

  9. Method, apparatus, and system for speculative abort control mechanisms

    An apparatus and method is described herein for providing robust speculative code section abort cont ...

  10. LeetCode OJ-- N-Queens **

    https://oj.leetcode.com/problems/n-queens/ n皇后问题,1皇后有1个解,4皇后2个解,8皇后也有解…… 每个皇后不能在同一行上,同一列上,以及同一条45度线上 ...