马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
今天学习修改元素属性。
1. 元素属性:
核心DOM:凡是来自于不带HTML开头的父类型中定义的属性和方法
HTML DOM:凡是继承自HTML开头的父类型中定义的属性和方法
body-->HTMLBodyElement//HTML DOM
-->HTMLElement//HTML DOM
-->Element//核心DOM
-->Node//核心DOM
比如:元素:-->HTMLXXXElement的原型
-->HTMLElement的原型--->所有HTML元素的父类型
******以上是HTML DOM,以下是核心DOM*****
-->Element的原型--->所有元素的父类型
-->Node的原型--->所有节点的父类型
注意:一切从属性获取的值和设置到属性上的值必须都是字符串
所以,计算时,都要先类型转换,再计算!
获取元素的属性值:3种:
1. var strValue=elem.getAttribute("属性名");
使用场合:只找一个属性值时
2. elem.attributes集合:包含了当前元素所有属性的节点对象
var strValue=elem.attributes[i/"属性名"]-->返回一个属性节点对象
//属性集合 属性节点
elem.attributes[i/"属性名"].value-->属性值
何时使用:遍历一个元素所有属性时使用
3. elem.getAttributeNode("属性名")-->返回一个属性节点
var strValue=elem.getAttributeNode("属性名").value-->返回属性值
修改元素的属性值:2种:--------》所有属性值都是字符串
1. elem.setAttribute("属性名","属性值"); //没有返回值
何时使用:只设置一个属性值时
2. elem.setAttributeNode(属性节点对象)
例如:
- <!DOCTYPE html>
- <html>
- <head>
- <title> new document </title>
- <meta charset="utf-8" />
- </head>
-
- <body><a href="http://weixin.com">go to weixin</a>
- <script>
- document.body.firstChild.setAttribute("target","_blank");
- </script>
- </body>
- </html>在页面上点击 go to weixin ,实现页面跳转。 移除元素的属性:2种: 1. elem.removeAttribute("属性名") 2. elem.removeAttributeNode(属性节点对象) 判断是否包含指定属性:1种: 1. elem.hasAttribute("属性名")-->有,则返回true;没有,则返回false 总结:4个词: attributes集合 elem.getAttribute elem.setAttribute removeAttribute hasAttribute HTML DOM: 获取/修改属性:elem.属性名 删除属性:elem.属性名=""; 判断:if(elem.属性名) Property vs Attribute 属性 html特性 Property: 内存中对象的属性,通常用.访问 Attribute: 指出现在页面html代码中的属性,只能通过get/setAttribute访问 标准属性:Property等效于Attribute 比如:a.setAttribute("href","url")——>核心DOM a.href="url"; ——>HTML DOM HTML标准属性:既是html元素的特性,同时又是内存中元素对象的属性 自定义属性:html也可以自定义属性 例如: li.setAttribute("age","25");==><li age="25"></li> 只能用getAttribute("age");-->25 li.age=25;===>仅存储在内存中,无法出现在页面元素上,只能用.获取 自定义属性,核心DOM和HTML DOM不通用! 今后操作标准属性,用HTML DOM 因为所有标准属性都被HTMLXXXElement及其父类型预定义好了 特例:txt.setAttribute("class","类名"); txt.className="类名";例如:
- <!DOCTYPE HTML>
- <html>
- <head>
- <title>修改元素的属性</title>
- <meta charset="utf-8" />
- <script src="js/3_1.js"></script>
- </head>
- <body>
- <!--1. 使用自定义属性实现摇号排名-->
- <ul id="queue">
- <li>Tony</li>
- <li>Mary</li>
- <li>Jerry</li>
- <li>Tom</li>
- <li>Mark</li>
- <li>Jony</li>
- <li>Aomar</li>
- <li>North</li>
- </ul>
- </body>
- </html>
复制代码下面是js文件:
- window.onload=function(){
- //找到id为queue的ul元素,保存在变量ul中
- var ul=document.getElementById("queue");
- //找到ul下所有li保存在变量lis中
- var lis=ul.getElementsByTagName("li");
- //声明len变量保存lis的length
- var len=lis.length;
- //创建空数组nums,保存随机生成的数字
- var nums=[];
- //循环,直到nums的length等于len
- while(nums.length<len){
- // 在1~len之间生成一个随机整数保存在变量num中
- var num=Math.floor(Math.random()*len+1);
- if(nums.indexOf(num)==-1){//如果nums中不包含num
- nums.push(num)//将num压入nums中
- }
- }
- //遍历lis中每个li
- for(var i=0;i<len;i++){
- // 为当前li添加自定义属性"data-i",
- // 值为nums中相同位置的数字
- //lis[i].setAttribute("data-i",nums[i]);
- lis[i].dataset.i=nums[i];
- }
- //将类数组对象lis转为普通数组,再存回lis中
- lis=Array.prototype.slice.call(lis);
- //将lis按自定义属性data-i的值从小到大排序
- lis.sort(function(a,b){//a和b在运行时都指li
- return a.dataset.i-b.dataset.i;
- });
- ul.innerHTML="";//清空ul下所有子元素
- //遍历lis数组中每个li
- for(var i=0;i<len;i++){
- ul.appendChild(lis[i]);
- }
- }
复制代码下面是页面效果:
页面刷新一次后效果:
H5中自定义属性标准:
h5规定:凡是自定义属性都要加data-前缀
获取自定义属性值:a.dataset.属性名
设置自定义属性值:a.dataset.属性名=值
问题:类数组对象能否转为数组?
数组=Array.prototype.slice.call(类数组对象);
问题:能否对类数组对象排序?2步:
1. 数组=Array.prototype.slice.call(类数组对象);
2. 数组.sort(); |