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 ...
随机推荐
- SSH Config 那些你所知道和不知道的事 (转)
原文地址:https://deepzz.com/post/how-to-setup-ssh-config.html SSH(Secure Shell)是什么?是一项创建在应用层和传输层基础上的安全协议 ...
- nginx新增tcp模板
最近在装nginx时,发现新增了tcp模板,装了一遍,现记录下来过程. 1.下载nginx源码包,并解压 2.下载tcp模板压缩包https://github.com/yaoweibin/nginx_ ...
- LR 11 代理录制步骤
1.新一个HTTP录制,到下图步骤 按下图说明设置信息,点击update 选择rl里面的代理exe(wplus_init_wsock.exe),具体路径为下图 打开浏览器设置代理(Internet选项 ...
- Eclipse 新建 Maven web 项目
File --> New --> Maven Project --> 选择存放路径 --> 选择骨架 --> 输入Maven坐标 --> 初步成型,下面还要配置 1 ...
- GUI学习之三——QObject学习总结
鉴于PyQt控件的继承关系,我们先学习PyQt控件的基类——QObject. 一.所有的QT对象的基类 我们先看一下PyQt里空间的继承关系,稍微改一下代码,显示出继承关系 from PyQt5.Q ...
- [Hbase]Hbase章4 Hbase分区爆了
又搞事了,发生了啥事呢:生产分区数暴了,What? 目前的情况: 前提:单Region Server分区上限设置为1000: 目前A表的数据量半年达到25E,20G一分区,达到了900多个分区,这是要 ...
- VB批量替换文本字符
Private Sub Command1_Click()Open App.Path & "\abc.txt" For Binary As #1a = Input(LOF(1 ...
- 安装nodeJs静态服务器(NodeJs Express MVC 框架)
安装 NodeJs Express MVC 框架 新建项目文件夹 打开cmd 执行以下操作: 一.使用Express框架 1)安装express3 $: npm install -g ex ...
- mysql sql mode
/usr/local/mysql/bin/mysqld --verbose --help | grep -A 1 'Default options' (1)关于配置文件路径 有时候,我发现虽然尝试修改 ...
- python3 利用pip命令安装包和模块
本文介绍如何利用pip命令安装Python相关的包和模块.在Python中有些方法或者模块是自带的功能,也叫(build-in),内构函数,实际使用,可能内构函数或者模块不能完成我们的任务,我们就需要 ...