1.节点的的三大属性
nodeType:节点类型,值为一个数字,只能判断节点的类型无法细致区分每个标签的名称,需要nodeName
document:9;
Element:1;
attribute:2;
Text:3
nodeName:节点名称
nodeType为Element:得到的标签名(全为大写)
nodeType为Attribute:得到的是属性名
nodeType为Text:返回的是#text
nodeType为document:返回的是#document
nodeValue:节点内容
当nodeType为Element:返回的是null(无效,也就是说当nodeType为Element的时候用nodeValue没意义)
当nodeType为Attribute:返回的是属性值
当nodeType为Text:返回的是文本内容
2.节点关系
@node节点
#父子节点
parentNode
childNodes
firstChild
lastChild
#兄弟关系
previousSibling
nextSibling
@元素节点
#父子关系
parentElement
children
firstElementChild
lastElementChild
#兄弟关系
previousElementSibling
nextElementSibling
对比:
node节点优点是包含所有的节点,缺点是除parentNode外均受空字符的影响,而且childNodes获得的是动态集合,也就是没调用一次就要重新查询
元素节点的优点就是不受空字符的影响,缺点是仅包含元素节点不能包含所有的节点
3.查找节点
@按照ID查找
var elem=document.getElementById("id"); //找不到返回的是null,传入的是ID,比如id="box",传入的参数为box而不是#box
@按照标签名查找
var elem=parent.getElementByTagName("标签名")
找到的是parent下的所有的指定标签的名的元素对象,如果没查到返回的是空集合,即使只查询到一个也要用[0]取出
@按照name属性查找
var elem=document.getElementByName("name");
一般含有name属性的是form里面的input,所有可简写为form.name.返回值及处理方法和getElementByTagName一致
@按照class查找
var elem=document.getElementByClassName("class属性名")
返回值及处理方法同getElementByTagName
@选择器查找按照选择器查找
var elem=parent.querySelector("selector");返回的是符合要求的元素
var elems=parent.querySelectorAll("selector"):返回的是所有符合要求的元素
4.修改节点的值
@内容
elem.innerHTML:获取的是标签开始到标签结束的所有内容(哪怕标签之内还有标签)
获取:console.log(elem.innerHTML)
修改:elem.innerHTML="修改标签之间的内容";
elem.textContent:获取标签开始到标签结束的之间的文本内容,去掉子标签
虽然elem.innerText在大多数比较新的浏览器中是可以实现textContext的功能,但是在低版本的IE浏览器中无法识别innerText
@属性
#获取属性值
通过节点对象获取属性值
1.var attrNode=elem.attributes[i/"属性名"];
attrValue=attrNode.value;-->获得属性值
2.var attrNode= elem.getAttributeNode("属性名");
attrValue=attrNode.value;-->获取属性值
直接获取属性值
var attrValue = elem.getAttribute("属性名");
#设置属性值
1.attrNode=document.createAttribute("属性名");//创建属性节点
attrNode.nodeValue=属性值;//设置属性值
elem.setAttributeNode(attrNode);//将属性节点添加到元素上去
2.elem.setAttribute("属性名",属性值);
#移除属性
elem.removeAttribute("属性名");
#判断属性是否存在
var bool = elem.hasAttribute("属性名");
HTML的DOM只能访问HTML的标准属性,不能访问自定义属性,解决方案就是使用核心DOM
HTML5中规定所有的自定义属性必须以data-开头,
访问自定义属性elem.dataset.属性名;属性名前面不加data-;
eg: <div id="aa" data-bb="cc"></div>
var aa=document.getElementById("aa");
console.log(aa.dataset.bb)//cc
@样式
内联样式
获取elem.style.属性名
1.只可获取内联样式
2.在JS中属性名均是去横线变驼峰
css:background-color
JS:backgroundColor
3.取值时要去掉单位,转为浮点数,赋值时要加单位
由于内联样式无法所有应用到元素上的样式,所以在开发中获取计算后的所有样式很有必要
var style=getComputedStyle(elem);
获取属性值:attrValue = style.属性名
在IE8及以下中不兼容getComputedStyle();
IE8:var style=elem.currentStyle;