左右移动元素及省市联动案例
案例描述
两个案例,分为左右移动元素与省市联动。如图所示
左右移动元素
左右移动案例很简单,思路大致如下:
获取当前点击的元素
移动元素
单个
将一个元素标签移动到右边
全部
将全部元素移动到右侧
在线演示:https://antmoe.gitee.io/project/2020/04/18/index.html
我们的html结构如下:
1 | <div class="container"> |
实现移动单个
实现的思路就是遍历左边容器里的每个选项,判断是否被选中(判断
option.selected
)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15// 添加到右边
var add = document.getElementById('add')
add.onclick = function () {
// 左边被选中的
var first = document.getElementById('first')
var options = first.getElementsByTagName('option')
for (var i = 0; i < options.length; i++) {
var option = options[i]
if (option.selected) {
// 移动到右边去
var second = document.getElementById('second')
second.appendChild(option)
}
}
}实现移动全部
1
2
3
4
5
6
7
8
9
10
11
12// 移动到右边
var addAll = document.getElementById('add_all')
addAll.onclick = function () {
var first = document.getElementById('first')
// HTMLCollection集合
var options = first.getElementsByTagName('option')
for (var i = 0; i < options.length; i++) {
var option = options[i]
var second = document.getElementById('second')
second.appendChild(option)
}
}移动全部会遇到一个问题,我们通过
first.getElementsByTagName('option')
获取的内容,返回内容为一个动态集合,也就是说当移动一个元素后,这个集合的内容也就会发生变化。解决方案有两个
第一种
①取到集合的总长度,并赋予变量
②循环的条件为小于这个变量
③循环取得值为第一项(固定)即
options[0]
1
2
3
4var length = options.length
for (var i = 0; i < length; i++) {
var option = options[0]
}第二种
每一次循环完后循环的标志位减1即可。
1
2
3
4for (var i = 0; i < options.length; i++) {
var option = options[i]
i--
}
因此我们的最终的代码就变成了
1
2
3
4
5
6
7
8
9
10
11
12
13
14var addAll = document.getElementById('add_all')
addAll.onclick = function () {
var first = document.getElementById('first')
// HTMLCollection集合
var options = first.getElementsByTagName('option')
// 1.具有11个元素,至少得11遍的循环
var length = options.length
for (var i = 0; i < options.length; i++) {
var option = options[0]
var second = document.getElementById('second')
second.appendChild(option)
i--
}
}
至于从右边移动到左边,思路基本相同。
1 |
|
省市联动案例
省市联动思路也较为简单,在线演示
- 界面加载完毕后,从数据里加载出数据
- 选择数据后,将对应的内容添加到市
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小康博客!
评论
TwikooWaline