@GivenCui
2016-06-01T09:58:53.000000Z
字数 3742
阅读 673
js高级
- 新建json假数据
- 用Ajax访问
- 用数组的相关操作
- open()打开子页面,父子页面的传值
- 封装练习
- this的用法
- DOM的元素的动态创建和删除
- select标签和Select对象的属性
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>选人</title>
<style type="text/css">
div {
float: left;
border: 1px solid red;
}
#main_div {
width: 500px;
height: 300px;
margin-left: 300px;
}
#left_div {
width: 200px;
height: 300px;
}
#center_div {
width: 94px;
height: 300px;
text-align: center;
}
#right_div {
width: 200px;
height: 300px;
float: right;
}
#left_sel {
width: 200px;
height: 280px;
}
#right_sel {
width: 200px;
height: 280px;
}
input {
margin-top: 30px;
}
</style>
<!-- 导入事件工具js文件 -->
<script type="text/javascript" src="EventUtil.js"></script>
</head>
<body>
<div id="main_div">
<!-- 左边的div -->
<div id="left_div">
<label id="left_label">0</label>
<select id="left_sel" multiple>
</select>
</div>
<!-- 中间的div -->
<div id="center_div">
<input type="button" value="添加" id="add_btn" />
<br />
<input type="button" value="移除" id="remove_btn" />
<br />
<input type="button" value="全部添加" id="addAll_btn" />
<br />
<input type="button" value="全部移除" id="removeAll_btn" />
</div>
<!-- 右边的div -->
<div id="right_div">
<label id="right_label">0</label>
<select id="right_sel" multiple>
</select>
</div>
</div>
<!-- ***************************************************************************** -->
<script type="text/javascript">
//左边sel
var leftSel = $("left_sel");
//左边数据数组
var leftPersonArray = new Array();
//右边sel
var rightSel = $("right_sel");
//右边数据数组
var rightPersonArray = new Array();
//window的onload事件
EventUtil.addHandler(window, "load", function () {
//1、初始化数据
var personObj = [
{
name : "张三"
},
{
name : "李四"
},
{
name : "王五"
},
{
name : "赵六"
},
{
name : "冯七"
}
];
//遍历personObj
for (var tempIdx in personObj) {
//得到每个person对象
var tempPerson = personObj[tempIdx];
//添加到左边数据数组
leftPersonArray.push(tempPerson);
//重置左边sel
resetSel(leftSel, tempPerson.name);
//人数
leftAndRightCount();
}
//2、给左边sel添加事件
EventUtil.addHandler(leftSel, "dblclick", function () {
//添加右边数据数组
// this.selectedIndex 相当于leftSel.selectedIndex,获得选中option的下标
rightPersonArray.push(leftPersonArray[this.selectedIndex]);
//重置右边sel
resetSel(rightSel, leftPersonArray[this.selectedIndex].name);
//删除左边数据数组
leftPersonArray.splice(this.selectedIndex, 1);
//删除左边option
//this.options 获得所有option 是一个数组
leftSel.removeChild(this.options[this.selectedIndex]);
//人数
leftAndRightCount();
});
//3、给添加按钮添加事件
EventUtil.addHandler($("add_btn"), "click", function () {
//遍历options
for (var i = 0; i < leftSel.options.length; i++) {
//找出选中的option
if (leftSel.options[i].selected) {
//添加右边数据数组
rightPersonArray.push(leftPersonArray[i]);
//重置右边sel的方法
resetSel(rightSel, leftPersonArray[i].name);
//删除左边数据数组
leftPersonArray.splice(i, 1);
//删除左边的option
leftSel.removeChild(leftSel.options[i]);
//每次删除后要改变下标
// i -= 1;
i--;
}
}
//人数
leftAndRightCount();
});
//4、右边sel添加事件
//5、给移除按钮添加事件
//6、给全部添加按钮添加事件
EventUtil.addHandler($("addAll_btn"), "click", function () {
//遍历左边的options
for (var i = 0; i < leftSel.options.length; i++) {
//添加右边数据数组
rightPersonArray.push(leftPersonArray[i]);
//重置右边sel
resetSel(rightSel, leftPersonArray[i].name);
//删除左边数据数组
leftPersonArray.splice(i, 1);
//删除左边option
leftSel.removeChild(leftSel.options[i]);
//改变下标
i--;
}
//人数
leftAndRightCount();
});
//7、给全部移除按钮添加事件
});
/******************封装的方法*****************************************************/
//封装左边和右边人数的方法
function leftAndRightCount () {
$("left_label").innerHTML = leftPersonArray.length;
$("right_label").innerHTML = rightPersonArray.length;
}
//封装重置sel的方法
function resetSel (sel, textNodeValue) {
//创建option
var option = createElement("option");
//创建textNode
var optionValue = createTextNode(textNodeValue);
//添加textNode
option.appendChild(optionValue);
//添加option
sel.appendChild(option);
}
//封装创建元素的方法
function createElement (elementName) {
return document.createElement(elementName);
}
//封装创建textNode的方法
function createTextNode (elementValue) {
return document.createTextNode(elementValue);
}
//封装通过id获取标签的方法
function $ (idName) {
return document.getElementById(idName);
}
</script>
</body>
</html>