马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
回顾昨天关于querySelector选择器:Selector API
1. 如果使用document调用Selector API,选择器作用范围是整个页面
2. 如果使用父元素对象调用Selector API,选择器作用范围是父元素下所有子节点。
今天学习如何修改元素的内容,
1. 修改元素的内容:
1. innerHTML:获取或设置元素开始标签到结束标签之间的HTML内容。
何时使用:只要获取或设置元素的内容时
固定套路:2个:
1. 清空子元素:parent.innerHTML="";
2. 批量替换子元素:
parent.innerHTML="所有子元素标签组成的html字符串"
批量删除和单独删除元素对象的效率差异:
DOM Tree-->Render Tree
↑
layout(reflow) 最耗时
1.尽量少触发layout,增加和删除元素节点
2.批量操作减少触发layout,提高执行效率
例如:
- <!DOCTYPE html>
- <html>
- <head>
- <title> new document </title>
- <meta charset="utf-8" />
- </head>
- <body>
- <ul id="navi"
- style="height:200px;width:200px;border:1px solid red">
- <li>电影</li>
- <li>电视剧</li>
- <li>广告</li>
- <li>音乐</li>
- </ul>
- <button onclick="document.getElementById('navi').innerHTML=''">click me</button>
- </body>
- </html>
复制代码这是页面效果:
这是点击按钮之后的效果:
例如:
- <!DOCTYPE HTML>
- <html>
- <head>
- <title>读取并修改元素的内容</title>
- <meta charset="utf-8" />
- <style>
- div{float:left; height: 100px; line-height: 100px; }
- #d1,#d3{ background-color: #ccff00; }
- #d2{ cursor: pointer; background-color: #ffcc00; }
- .hide{display:none};
- </style>
- <script>
- function toggle(d2){
- //找到d1,同时设置d1的className
- var d1=document.getElementById("d1");
- // 如果d1的className!="",就改为"",
- // 否则改为hide
- d1.className=d1.className!=""?"":"hide";
- //如果d2的innerHTML等于"<<",就改为">>"
- //否则改回lt
- d2.innerHTML=d2.innerHTML=="<<"?">>":
- "<<";
- }
- </script>
- </head>
- <body>
- <div id="d1">树形列表</div>
- <div id="d2" onclick="toggle(this)"><<</div>
- <div id="d3">内容的主体</div>
- </body>
- </html>
复制代码 页面效果:
点击 << 之后效果:
再点击 >> 之后的效果:
例如:
- <!DOCTYPE HTML>
- <html>
- <head>
- <title>读取并修改元素的内容</title>
- <meta charset="utf-8" />
- <style>
- select{width:100px;height:85px;}
- div{display:inline-block;width:50px}
- </style>
- <script src="js/2_2.js"></script>
- </head>
- <body>
- <!--假设两个select元素,分别保存备选地区列表和选中地区列表
- 实现两选择框之间选项的交换:
- 包括:点击"<"或">",当个选中项左右移动
- 点击<<或>>,多个选中项 左右移动
- 全左移和全右移
- 要求:两个select中的地区都要按照名称首字母排序
- -->
- <select id="unsel" size="5" multiple>
- <option>阿根廷</option>
- <option>巴西</option>
- <option>加拿大</option>
- <option>智利</option>
- <option>中国</option>
- <option>古巴</option>
- <option>德玛西亚</option>
- <option>埃及</option>
- <option>法国</option>
- <option>希腊</option>
- <option>西班牙</option>
- </select>
- <div>
- <button onclick="move(this)">>></button>
- <button onclick="move(this)">></button>
- <button onclick="move(this)"><</button>
- <button onclick="move(this)"><<</button>
- </div>
- <select id="sel" size="5" multiple>
- </select>
- </body>
- </html>
复制代码下面是js文件:
- window.onload=function(){
- (function(){
- //找到id为unsel的select元素,保存unsel中
- var unsel=document.getElementById("unsel");
- unselArr=unsel.innerHTML
- //将unsel的innerHTML,替换开始位置的s*<option>为""
- .replace(/^s*<option>/,"")
- //替换结束位置的</option>s*为""
- .replace(/</option>s*$/,"")
- //按</option>s*<option>切割
- .split(/</option>s*<option>/)
- })();
- }
- var unselArr=[];
- var selArr=[];
- function move(btn){
- switch(btn.innerHTML){
- case ">>"://将unselArr拼接到selArr结尾
- selArr=selArr.concat(unselArr);
- unselArr=[];
- break;
- case "<<"://将selArr拼接到unselArr结尾
- unselArr=unselArr.concat(selArr);
- selArr=[];
- break;
- case ">"://将unselArr中选中的项移动到selArr中
- //找到unsel中所有option,保存在变量opts中
- var opts=document.querySelectorAll("#unsel>option");
- //i从opts.length-1开始,遍历opts中每个option
- // 到0结束,每次递减1
- for(var i=opts.length-1;i>=0;i--){
- // 如果当前opt的selected属性有效
- if(opts[i].selected){
- // 将unselArr中i位置的元素删除,用变量delete接住,
- // 取delete中第0个元素,追加到selArr中
- selArr.push(unselArr.splice(i,1)[0]);
- }
- }
- break;
- case "<":
- //获取unsel中所有option,保存在变量opts
- var opts=this.sel.getElementsByTagName("option");
- //从后向前遍历opts
- for(var i=opts.length-1;i>=0;i--){
- // 如果当前option被选中
- if(opts[i].selected){
- //从selArr中删除相同位置的元素,同时将删除的元素压入unselArr中
- this.unselArr.push(this.selArr.splice(i,1));
- }
- }
- break;
- }//每次移动完,都要排序
- unselArr.sort();
- selArr.sort();
- show();
- }
- function show(){ //将每次移动后的两个数组join成html字符串,
- //放到对应sel元素的内容中
- //找到id为unsel的元素,保存在变量unsel中
- var unsel=document.getElementById("unsel");
- if(unselArr.length==0){//如果unselArr的长度为0
- unsel.innerHTML="";//就将unsel的内容设置为""
- }else{//否则:先拼unsel中的内容
- //将拼好的html放入,unsel中
- unsel.innerHTML=
- "<option>"+unselArr.join("</option><option>")+"</option>";
- }
- //找到id为sel的元素,保存在变量sel中
- var sel=document.getElementById("sel");
- if(selArr.length==0){//如果selArr的长度为0
- sel.innerHTML="";//就将sel的内容设置为""
- }else{//否则:先拼sel中的内容
- // 将拼好的html放入,sel中
- sel.innerHTML=
- "<option>"+selArr.join("</option><option>")+"</option>";
- }
- }
复制代码下面是页面效果:
点击 >> 后:
点击 << 后:
选择 中国,点击 > 后:
再选择 中国,点击 < 后:
上面练习中,需要注意的问题:
1. option元素,selected属性表示是否被选中
可当做bool类型用
2. 遍历过程中可能减少元素个数时,都要从后向前遍历
2. textContent : 获取或设置开始标签到结束标签之间的文本内容
剔除了子标签,自动转换特殊符号为原文
IE8则换位innerText: |