问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

dom的element的attributes

发布网友 发布时间:2022-04-23 01:07

我来回答

2个回答

懂视网 时间:2022-04-23 05:28

在学习中经常会遇到javascript dom的一些问题,所以本篇将会对其进行讲解。

除了document对象,在DOM中最常用的就是Element对象了,Element对象表示HTML元素。

Element 对象可以拥有类型为元素节点、文本节点、注释节点的子节点,DOM提供了一系列的方法可以进行元素的增、删、改、查操作

Element有几个重要属性

nodeName:元素标签名,还有个类似的tagName
nodeType:元素类型
className:类名id:元素idchildren:子元素列表(HTMLCollection)
childNodes:子元素列表(NodeList)
firstChild:第一个子元素
lastChild:最后一个子元素
nextSibling:下一个兄弟元素
previousSibling:上一个兄弟元素
parentNode、parentElement:父元素

查询元素

getElementById
方法返回匹配指定ID属性的元素节点。如果没有发现匹配的节点,则返回null。这也是获取一个元素最快的方法

var elem = document.getElementById("test");getElementsByClassName()
getElementsByClassName

方法返回一个类似数组的对象(HTMLCollection类型的对象),包括了所有class名字符合指定条件的元素(搜索范围包括本身),元素的变化实时反映在返回结果中。这个方法不仅可以在document对象上调用,也可以在任何元素节点上调用。

var elements = document.getElementsByClassName(names);//getElementsByClassName方法的参数,可以是多个空格分隔的class名字,返回同时具有这些节点的元素。
document.getElementsByClassName('red test');```
* getElementsByTagName()

getElementsByTagName方法返回所有指定标签的元素(搜索范围包括本身)。返回值是一个HTMLCollection对象,也就是说,搜索结果是一个动态集合,任何元素的变化都会实时反映在返回的集合中。这个方法不仅可以在document对象上调用,也可以在任何元素节点上调用。

var paras = document.getElementsByTagName("p");
//上面代码返回当前文档的所有p元素节点。注意,getElementsByTagName方法会将参数转为小写后,再进行搜索。```
getElementsByName()
getElementsByName方法用于选择拥有name属性的HTML元素,比如form、img、frame、embed和object,返回一个NodeList格式的对象,不会实时反映元素的变化。

// 假定有一个表单是<form name="x"></form>var forms = document.getElementsByName("x");
forms[0].tagName // "FORM"//注意,在IE浏览器使用这个方法,会将没有name属性、但有同名id属性的元素也返回,所以name和id属性最好设为不一样的值。```* querySelector()
querySelector方法返回匹配指定的CSS选择器的元素节点。如果有多个节点满足匹配条件,则返回第一个匹配的节点。如果没有发现匹配的节点,则返回null。

var el1 = document.querySelector(".myclass");
var el2 = document.querySelector('#myParent > [ng-click]');
//querySelector方法无法选中CSS伪元素。```
querySelectorAll()
querySelectorAll方法返回匹配指定的CSS选择器的所有节点,返回的是NodeList类型的对象。NodeList对象不是动态集合,所以元素节点的变化无法实时反映在返回结果中。
elementList = document.querySelectorAll(selectors);//querySelectorAll方法的参数,可以是逗号分隔的多个CSS选择器,返回所有匹配其中一个选择器的元素。var matches = document.querySelectorAll("div.note, div.alert");//上面代码返回class属性是note或alert的div元素。
elementFromPoint()
elementFromPoint方法返回位于页面指定位置的元素。
var element = document.elementFromPoint(x, y);//上面代码中,elementFromPoint方法的参数x和y,分别是相对于当前窗口左上角的横坐标和纵坐标,单位是CSS像素。
elementFromPoint方法返回位于这个位置的DOM元素,如果该元素不可返回(比如文本框的滚动条),则返回它的父元素(比如文本框)。如果坐标值无意义(比如负值),则返回null。

创建元素

createElement()
createElement方法用来生成HTML元素节点。
var newDiv = document.createElement("div");//createElement方法的参数为元素的标签名,即元素节点的tagName属性。//如果传入大写的标签名,会被转为小写。如果参数带有尖括号(即<和>)或者是null,会报错。
createTextNode()
createTextNode方法用来生成文本节点,参数为所要生成的文本节点的内容。
var newDiv = document.createElement("div");var newContent = document.createTextNode("Hello");//上面代码新建一个div节点和一个文本节点
createDocumentFragment()
//createDocumentFragment方法生成一个DocumentFragment对象。var docFragment = document.createDocumentFragment();```

DocumentFragment对象是一个存在于内存的DOM片段,但是不属于当前文档,常常用来生成较复杂的DOM结构,然后插入当前文档。这样做的好处在于,因为DocumentFragment不属于当前文档,对它的任何改动,都不会引发网页的重新渲染,比直接修改当前文档的DOM有更好的性能表现。

##修改元素

* appendChild()
在元素末尾添加元素

var newDiv = document.createElement("div");var newContent = document.createTextNode("Hello");newDiv.appendChild(newContent);```
insertBefore()

在某个元素之前插入元素

var newDiv = document.createElement("div");var newContent = document.createTextNode("Hello");newDiv.insertBefore(newContent, newDiv.firstChild);replaceChild()
replaceChild()

接受两个参数:要插入的元素和要替换的元素

newDiv.replaceChild(newElement, oldElement);```
* removeChild()

删除元素

parentNode.removeChild(childNode);```
cloneNode()

克隆元素,方法有一个布尔值参数,传入true的时候会深复制,也就是会复制元素及其子元素(IE还会复制其事件),false的时候只复制元素本身

node.cloneNode(true);```##属性操作* getAttribute()
//getAttribute()用于获取元素的attribute值node.getAttribute('id');```
createAttribute()
//createAttribute()方法生成一个新的属性对象节点,并返回它。attribute = document.createAttribute(name);
createAttribute方法的参数name,是属性的名称。

setAttribute()

//setAttribute()方法用于设置元素属性var node = document.getElementById("div1");
node.setAttribute("my_attrib", "newVal");//等同于var node = document.getElementById("div1");var a = document.createAttribute("my_attrib");
a.value = "newVal";
node.setAttributeNode(a);```
* romoveAttribute()
removeAttribute()用于删除元素属性
node.removeAttribute('id');
element.attributes

当然上面的方法做的事情也可以通过类操作数组属性element.attributes来实现

####HTMLCollection和NodeList我们知道Element对象表示元素,那么多个元素的集合一般有两种数据类型NodeList 对象代表一个有顺序的节点列表HTMLCollection 是一个接口,表示 HTML 元素的集合,它提供了可以遍历列表的方法和属性

以下方法获取的为HTMLCollection对象

document.images //所有img元素
document.links //所有带href属性的a元素和area元素
document.anchors //所有带name属性的a元素
document.forms //所有form元素
document.scripts //所有script元素
document.applets //所有applet元素
document.embeds //所有embed元素
document.plugins //document.与embeds相同
document.getElementById("table").children
document.getElementById("table").tBodies
document.getElementById("table").rows
document.getElementById("row").cells
document.getElementById("Map").areas
document.getElementById("f2").elements //HTMLFormControlsCollection extends HTMLCollection
document.getElementById("s").options //HTMLOptionsCollection extends HTMLCollection```

以下方法获取的为NodeList对象

document.getElementsByName("name1")
document.getElementsByClassName("class1")
document.getElementsByTagName("a")
document.querySelectorAll("a")
document.getElementById("table").childNodes
document.styleSheets //StyleSheetList,与NodeList类似```#####HTMLCollection与NodeList有很大部分相似性* 都是类数组对象,都有length属性,可以通过for循环迭代

* 都是只读的

* 都是实时的,即文档的更改会立即反映到相关对象上面(有一个例外,document.querySelectorAll返回的NodeList不是实时的)

* 都有item()方法,可以通过item(index)或item("id")获取元素#####不同点在于* HTMLCollection对象具有namedItem()方法,可以传递id或name获得元素

* HTMLCollection的item()方法和通过属性获取元素(document.forms.f1)可以支持id和name,而NodeList对象只支持id

本篇对dom进行了相关的讲解,更多相关的内容请关注Gxl网。

热心网友 时间:2022-04-23 02:36

仅从这几句代码中分析,我认为是为了解决不同浏览器的差异。
在第一句执行完获得对象后,可能在有的浏览器中mapImage.mapAlias这个值不存在或为空,所以使用较为标准的mapImage.attributes['mapAlias'].value给其赋值,这样后面就可以统一使用mapImage.mapAlias来获得mapAlias属性值了。
当然也有其他的可能,需要看一下更多的代码了。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
单位不服二审生效判决向上一级法院申请再审 华为能升级鸿蒙系统的机型有哪些,升级鸿蒙系统会丢失数据吗 调音台调音技巧有哪些 调音台使用注意哪些问题 中档白酒什么酒好喝(中档白酒哪种好) 请说下子你有生以来喝过最醇厚的白酒是啥味道的? 类似去中歌的电视剧 有没有刘诗诗演的类似风中奇缘的电视剧 蓝盈盈曹俊曲终人散再成朋友,娱乐圈和平分手的情侣还有谁? 所有人产权比例怎么填 狗狗掉毛是怎么一回事?一个星期洗一次澡,也不去外面乱玩什么的,很干净... 魔兽世界更新之后那个30天的那个时光徽章划算吗,用来卖还合适吗? 魔兽世界7.0大概时光徽章月卡会多少金币一张? 时光徽章怎么卖?价格怎么定?卖不出去怎么办??AH要收5%的手续费吗? 国家级医学刊物有哪些 魔兽世界时光徽章与金币的兑换比例是多少 ★医学国家级期刊有哪些 中华临床医药杂志是正规刊物吗? 蚕蛹补肾胶囊多少钱一盒?, 我肾虚 腰老是凉的 膝盖酸软 易疲劳 特爱出汗 尤其是手心脚心 吃蚕蛹补肾胶囊配上淫羊藿巴戟天泡茶喝行 静脉漏阳痿吃什么药我已经吃三个月的蚕蛹补肾胶囊和希 请问前列腺炎,能用“太森蚕蛹补肾胶囊”。治好吗? 八子补肾胶囊对早泄有用吗? 蚕蛹补肾胶囊对慢性前列腺炎有治疗做用吗 太森蚕蛹补肾胶囊是壮阳药吗 请问各位大神广播里面的太森蚕蛹补肾胶囊是真药有效的吗? 阴经短小,吃蚕蛹补肾胶囊有效果没? 大夫,您好,我吃可俩个疗程得蚕蛹补肾胶囊,还用吃吗? 蚕蛹补肾胶囊可以经常吃吗 会耐药吗 阳痿早泄吃蚕蛹补肾胶囊治疗有效果吗? 蚕蛹补肾胶囊有什么功效和作用? 魔兽世界多少级可以购买时光徽章 个人租房税率 2022年4月1日起自然人代开房租租赁发票免征增值税吗 q7行车记录仪内存卡怎么拿出来 九目行车记录仪后摄像头无显示 九目行车记录仪格式化了开不了怎么办? 九目行车记录仪车子启动后,显示屏就卡机,无法正常使用,求解决方法,急急急 九目行车记录仪只录10秒就不录了,什么原因? 九目行车记录仪检测不到tf卡是什么情况 九目行车记录仪的文件怎么导出来 九目行车记录仪开关打开5秒后没图九目记录仪汽车发动时有图像显示5秒后没有了什么原因? 吃蛋清,无大便? 过年了,小时候很想过年,哪时住土坯房。对联一贴,鞭炮一放,冬笼一挂过年了。蜡烛点满房灯光菜端到桌子 为什么一放鞭炮我眼就睁不开 马配马生肖结婚好不好 生肖马和马相配吗?男的3月的女人12月的 股票涨跌幅度 javascript中 $符号的意思 比如element = $(element);什么意思? 股票幅度是什么意思 半夜起来嘴里面苦的是什么病??