2021-01-25

Attr节点类型

所有的元素数据(Html标签中定义的属性)在DOM中通过Attr类型表示,Attr节点具有以下特征:

  • nodeType等于2 ;
  • nodeName值为属性名 (name属性的值和nodeName一样);
  • nodeValue值为属性值(value属性的值和nodeValue一样);
  • parentNode值为null ;
  • 在Html中不支持子节点 ;
    注意: 属性节点尽管是节点,却不是DOM文档树中的一部分

创建节点对象,使用document.createAttribute(),参数为属性名:

//例如创建一个align属性节点:
let attr = document.createAttribute("align");

添加Attr节点到Element节点对象上:

//假设节点对象名为element:
element.setAttributeNode(attr);

attributes属性

element节点对象的attributes属性是一个NamedNodeMap实例,是一个类似于NodeList的“实时”集合。所有的Attr节点都在该集合中被引用。操纵这个NameNodeMap实例,是 通过该实例定义的三个方法来实现的:

  • getNamedItem(name) , 返回nodeName属性等于name的Attr节点 ;
  • removeNamedItem(name),删除nodeName属性等于name的Attr节点;
  • setNamedItem(AttrNode) , 向集合中添加Attr节点,索引为其nodeName;
  • item(position) , 返回索引位置position处的Attr节点 ;

示例代码如下 :

//获得集合中的Attr节点  : 
let id = element.attributes.getNameItem("id");  //也可以是let id = element.attributes.getNameItem("id");
//读取Attr节点的nodeName和nodeValue :
console.log(id.nodeName + ":" + id.nodeValue);

//删除指定名字的元素数据 :
let oldAttr = element.attributes.removeNamedItem("id");
//removeNamedItem()方法与Element节点对象上的removeAttribute()方法类似,都是删除指定名字的属性,不过removeNamedItem()的特殊之处在于,它会返回被删除的Attr节点。

//通过setNamedItem()方法为element节点对象添加Attr节点 :
element.attributes.setNamedItem(newAttr); 

通常,因为使用起来更加方便,开发者更喜欢使用直接定义在Element节点对象上的setAttribute(),getAttribute(),removeAttribute() 这3个方法来添加Attr节点。

操纵Attr节点的三种方式的区别

如上述所言,元素数据(即HTML标签中的属性)在DOM的JS实现中被定义为Attr节点类型的实例,在js中操作Attr节点对象,无非就是以下这几种行为:

  • 创建一个Attr节点对象 ;
  • 将现成的Attr节点对象挂载到Element节点对象上,表现为attributes属性的集合中出现对Attr节点的引用,并且在Element节点对象上的相关属性也会被赋值。例如将一个 Attr节点title 挂载到Element节点对象上,则在element.attributes集合中会有对它的引用 ,element.title的值也会和element.attributes.getNamedItem(“title”).nodeValue保持一致(相互的)。
  • 获得对Attr节点对象的引用 ;
  • 删除Attr节点,更确切的说,是将Attr节点从Element节点对象上卸载,表现为Element节点对象上的属性值为"",attributes的集合中也不会出现对Attr的引用。卸载后,若没有保持对Attr节点的引用,则"游离"的Attr节点可能会被内存回收。

综合上述,对操作Attr节点的3种方式进行总结() :

  • 通过Element节点对象上定义setAttribute(),getAttribute(),removeAttribute这3个方法来间接的操作Attr节点。之所以说是间接的,体现在它们接受的参数并不是Attr节点,所以不需要提前获得对Attr节点的引用。但是在它们的执行体内部,比如setAttribute(),是要经历创建Attr节点和挂载Attr节点这两个过程的。所以这3个方法在内部封装了对Attr节点的直接操作。
  • 通过Element节点对象上的+
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用python中的pymsql完成如下:表结构与数据创建 1. 建立 `users` 表和 `orders` 表。 `users` 表有用户ID、用户名、年龄字段,(id,name,age) `orders` 表有订单ID、订单日期、订单金额,用户id字段。(id,order_date,amount,user_id) 2 两表的id作为主键,`orders` 表用户id为users的外键 3 插入数据 `users` (1, '张三', 18), (2, '李四', 20), (3, '王五', 22), (4, '赵六', 25), (5, '钱七', 28); `orders` (1, '2021-09-01', 500, 1), (2, '2021-09-02', 1000, 2), (3, '2021-09-03', 600, 3), (4, '2021-09-04', 800, 4), (5, '2021-09-05', 1500, 5), (6, '2021-09-06', 1200, 3), (7, '2021-09-07', 2000, 1), (8, '2021-09-08', 300, 2), (9, '2021-09-09', 700, 5), (10, '2021-09-10', 900, 4); 查询语句 1. 查询订单总金额 2. 查询所有用户的平均年龄,并将结果四舍五入保留两位小数。 3. 查询订单总数最多的用户的姓名和订单总数。 4. 查询所有不重复的年龄。 5. 查询订单日期在2021年9月1日至9月4日之间的订单总金额。 6. 查询年龄不大于25岁的用户的订单数量,并按照降序排序。 7. 查询订单总金额排名前3的用户的姓名和订单总金额。 8. 查询订单总金额最大的用户的姓名和订单总金额。 9. 查询订单总金额最小的用户的姓名和订单总金额。 10. 查询所有名字中含有“李”的用户,按照名字升序排序。 11. 查询所有年龄大于20岁的用户,按照年龄降序排序,并只显示前5条记录。 12. 查询每个用户的订单数量和订单总金额,并按照总金额降序排序。
06-03

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值