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 ...
随机推荐
- SQL 数据库高CPU占用语句排查
前述 最近一个项目CPU占用非常高,在IIS内设置CPU限制后系统频繁掉线,通过任务管理器发现SQLSever数据库占用CPU达到40%--70%,对于数据库本人也就处在增删查改几个操作水平层面,这次 ...
- 机器学习入门-BP神经网络模型及梯度下降法-2017年9月5日14:58:16
BP(Back Propagation)网络是1985年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一. B ...
- chip8模拟器的python3实现-1-CHIP8简介
打算编写一个NES模拟器,先从简单的chip8模拟器入手 1.CHIP-8简介 CHIP-8是一个解释型语言,由Joseph Weisbecker开发.最初CHIP-8在上个世纪70年代被使用在COS ...
- linux wc使用详解
转载:https://www.cnblogs.com/peida/archive/2012/12/18/2822758.html Linux系统中的wc(Word Count)命令的功能为统计指定文件 ...
- JavaScript数据类型,构造函数
JavaScript 的数据类型分为两类:原始类型和对象类型. JavaScript中的原始类型包括数字.字符串和布尔值 JavaScript中有两种特殊的原始值:null和undefined. Ja ...
- dotNet程序员的Java爬坑之旅(一)
仔细想了下还是转java吧,因为后期不管是留在北京也好还是回老家也好,java的工作都会好找一点.现在的工作主要还是写.net,目标是下一次离职的时候可以找到一份全职的java工作,我一直都觉得实践才 ...
- mr统计每年中每月温度的前三名
weatherMapper package com.laoxiao.mr.weather; import java.text.ParseException; import java.text.Simp ...
- EL和JSTL笔记
1.EL表达式 [1] 简介 > JSP表达式 <%= %> 用于向页面中输出一个对象. > 到JSP2.0时,在我们的页面中不允许出现 JSP表达式和 脚本片段. > ...
- maven跳过测试编译命令
mvn clean install/package/deploy -Dmaven.test.skip=true
- nginx常用服务配置
一.nginx.conf的配置方式,创建新vhost user nginx; worker_processes ; worker_cpu_affinity ; worker_rlimit_nofile ...