Javascript高级编程学习笔记(79)—— 表单(7)选择框脚本
选择框脚本
选择框由<option>和<select>元素创建,为了方便选择框的交互,除了提供表单字段的公有方法之外
HTMLSelectElement 类型还提供下列特有的属性和方法:
- add(newOption, relOption) : 向控件中插入新的 option 位于 relOption 之前
- multiple : 布尔值,表示空间是否允许多选,多选 type 值为 select-multiple 否则为 select-one
- options : 所有 option 的 HTMLCollection 集合
- remove( index ):移除指定位置的的选项
- selectIndex: 从0开始,表示当前选中项在所有选项中的索引,若没有选中项那么值为 -1
- size : 选择框的可见行数
对于选择框的值有以下几点:
- 如果没有选中项,则选择框的 value 属性的值为空字符串
- 如果有一个选中项且在HTML中指定了 value 特性,那么选择框的值与选中项的 value 值一致,如:
<option value="example"></option>
- 如果有一个选中项但在HTML中没有指定 value 特性,那么选择框的值与选中项的文本一致,如:
<option>Example</option>
- 如果有多个选中项,那么选择框将根据上面两条规则获取选中的第一个选项的值
此外在DOM中,每个<option>元素都由一个 HTMLOptionElement 对象表示,以便访问数据
该对象拥有以下属性:
- index : 当前选项在 options 集合中的索引
- label : 当前选项的标签, 等价于HTML中的 label 特性
- selected : 布尔值,表示当前选项是否被选中,设置为 true 可以设置当前选项
- text : 当前选项的文本
- value : 选项的值
上面的属性都是为了提高对选项数据的访问效率
虽然可以使用 getAttribute() 等DOM方式访问,但是效率低下
PS: 选择框的 change 事件的触发条件和其它表单字段有所不同,当选择了不同的选项时就会触发,不需要失去焦点
选择选项
对于只允许选择一项的选择框来说,访问选中项的最简单的方式就是使用选择框的 selectedIndex 属性:
var selectedOption = selectBox.options[selectBox.selectedIndex];// 获取选中的选项
但是对于可以选择多项的选择框, selectedIndex 属性表现和不允许多选一致,则设置该属性会取消之前所有选中的项,然后选中指定的那一项
并且读取该属性也只能获取所有选中项中的第一个
所以如果需要获取所有选中的项,则需要对所有的 option 进行遍历
通过 option 的 selected 属性来判断,此外对于单选的选择框将其的 selected 的值设置为 false 并不会有影响
获取所有选中的 option 可以使用以下函数:
function getSelectedOptions(selectbox){
var result = new Array();
var option = null; for(let i = 0,len = selectbox.options.length; i < len ; i++){
option = selectbox.options[i];
if(option.selected){
result.push(option);
}
} return result;
}
添加选项
我们可以使用JS动态创建选项,并将其添加到选择框中
以添加一个 option 到选项框的末尾为例:
使用DOM方式如下所示:
var newOption = document.createElement("option");
newOption.appendChild(document.createTextNode("option text"));
newOption.setAttribute("value","Option value"); selectbox.appendChild(newOption);
使用option构造函数的方式如下:
var newOption = new Option("option text","Option value"); selectbox.appendChild(newOption);
使用 select 的 add 方法:
var newOption = new Option("option text","Option Value"); selectbox.add(newOption, undefined);// 最佳方案
移除选项
与添加选项类似,移除选项也有多种方法
首先可以使用 removeChild 方法
selectbox.removeChild(selectbox.options[0]);// 移除第一个选项
也可以使用选择框的 remove 方法
selectbox.remove(0);
还可以将相应选项的值设置为 null
selectbox.options[0] = null;
需要注意的是当我们移除选项时,剩余的选项会依次向前补全位置
所以如果希望移除所有的选项,那么我们只需要循环地移除选项中的第一个即可
移动和重排
在DOM标准出现之前,将一个选择框中的选项移动到另一个选择框中是十分麻烦的
整个过程需要先从第一个选择框移除选项,然后以相同的值创建一个 option 选项
再将创建好的 option 移入第二个选项框
但是使用 DOM 的appendChild 方法就可以轻松完成该操作,因为appendChild 方法会先将指定节点从其父节点移除
然后再将其插入文档的指定位置:
var selectbox1 = document.getElementById("selectbox1");
var selectbox2 = document.getElementById("selectbox2"); selectbox2.appendChild(selectbox1.options[0]);
移动选项与移除选项有着相近的地方,那就是都会重置 index 属性
对于重排选项次序来说,最适合的 DOM 方法就是 insertBefore:
var optionToMove = selectbox.optionsp[1];
selectbox.insertBefore(optionToMove,selectbox.options[optionToMove.index-1]);
Javascript高级编程学习笔记(79)—— 表单(7)选择框脚本的更多相关文章
- 《JavaScript高级程序设计》笔记:表单脚本(十四)
表单的基础知识 在HTML中,表单是由<form>元素来表示的,而在JS中,表单对应的是HTMLFormElement类型.HTMLFormElement继承了HTMLElement,因而 ...
- Javascript高级编程学习笔记(75)—— 表单(3)表单字段
表单字段 表单作为web应用中不可或缺的一部分,当然也是可以使用原生的 DOM 元素来访问的 除了标准的访问方式之外,每个表单都拥有一个 elements 属性,该属性保存着该表单所有 表单元素 的集 ...
- Javascript高级编程学习笔记(80)—— 表单(8)表单序列化
表单序列化 随着 Ajax 的出现,表单序列化成为一种常见需求 以将表单信息序列化为查询字符串为例 我们可以利用表单的 type 属性,以及 name 和 value 实现对表单的序列化 序列化应满足 ...
- Javascript高级编程学习笔记(78)—— 表单(6)HTML约束验证API
自动切换焦点 使用JS可以极大地提升表单的易用性 其中最常用的一种就是当用户填写完当前字段后焦点自动切换到下一个字段 以下方的HTML代码为例: <input type="text&q ...
- Javascript高级编程学习笔记(77)—— 表单(5)过滤输入
在日常实践中,我们常常会需要用户按照某种规则输入数据 但是文本框在默认情况下缺少验证数据的手段,因此需要使用JS来完成此类过滤输入的操作 通过事件和DOM的结合手段就能够将普通的文本框转换为功能型控件 ...
- Javascript高级编程学习笔记(74)—— 表单(2)表单提交及重置
表单提交 表单的很大一部分作用就是帮助用户完成和服务器的交互 所以表单提交是表单中比较重要的部分 虽然现如今的大部分应用场景都使用 AJAX 的异步请求来代替表单,但是仍有部分操作需要使用表单来完成, ...
- Javascript高级编程学习笔记(73)—— 表单(1)表单基础
表单 JS最初的一个用途就是帮助服务器分担处理表单的责任 时至今日,虽然web应用以及JS都有了长足的发展,但是表单依然是现在web应用中比较重要的部分. 因为默认的表单控件很丑,所以有时候我们会使用 ...
- Javascript高级编程学习笔记(83)—— 富文本选区(3)
富文本选区 在富文本编辑器中使用 iframe 的 getSelection() 方法可以获取选中的文本 该方法是 window 对象和 document 对象的属性,调用后会返回一个当前选选择文本的 ...
- Javascript高级编程学习笔记(64)—— 事件(8)键盘与文本事件
键盘与文本事件 用户在使用键盘时会触发键盘事件 “DOM2级事件”最初规定了键盘事件,但是最后在定稿时又删除了相应内容 所以键盘事件被放入了DOM3级事件的规范中 总的来说有三个键盘事件: keydo ...
随机推荐
- LR 11 代理录制步骤
1.新一个HTTP录制,到下图步骤 按下图说明设置信息,点击update 选择rl里面的代理exe(wplus_init_wsock.exe),具体路径为下图 打开浏览器设置代理(Internet选项 ...
- Codeforces Round #436 (Div. 2)D. Make a Permutation! 模拟
D. Make a Permutation! time limit per test: 2 seconds memory limit per test: 256 megabytes input: st ...
- monkey命令解析
- 关于jquery的选择器中的空格问题
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- java之路 把1到100之间的数的偶数相加
/** *把1到100之间的数的偶数相加 */ class Demo{ public static void main(String[] args){ int i =1; int sum = 0; d ...
- 【机器学习】K均值算法(II)
k聚类算法中如何选择初始化聚类中心所在的位置. 在选择聚类中心时候,如果选择初始化位置不合适,可能不能得出我们想要的局部最优解. 而是会出现一下情况: 为了解决这个问题,我们通常的做法是: 我们选取K ...
- LoadRunner简单介绍----性能自动化测试工具
在做性能测试中,我认为技术可以说是武功心法,工具则是一把利剑,有一把好的利剑可以帮助自己更好的完成性能测试工作.在这里简单介绍一下LoadRunner,带大家一起来认识一下这把尚方宝剑. 一.性能测试 ...
- php-fpm 配置中pm的选择
另附豆瓣技术贴:https://www.douban.com/note/315222037/ 1.php-fpm优化参数介绍他们分别是:pm.pm.max_children.pm.start_serv ...
- 环境搭建文档——Windows下的Git搭建详解
Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理.具体安装步骤如下: 第一步:先从官网下载最新版本的Git 官网地址:https://git-scm.com/do ...
- 关于H5在微信获取授权
很尴尬,flag倒了很久,这才来更新. 1.作为一枚小前端,所做的就是把微信获取授权之后的链接和所需的参数给到后端,定好之后只要获取链接就好了.(⊙o⊙)…确实就是这么简单,基本上这种授权是需要后端来 ...