JavaScript DOM操作
操作dom
dom中节点类型 document文档节点:代表整个网页,不代表任何html标记,但它是html的父节点 element元素节点:指任何html标记。每一个html标记就称一个“元素节点”。它可以有文本节点和属性节点。 attribute属性节点:指html标记的属性。 text节点:是节点树的最低节点。 核心dom中的公共的属性和方法 提示:核心dom中查找结点(标记),都是先从根节点开始的(html节点)。主要是针对于html4.0开发的。 html dom的新特性 每一个html标记与元素对象的属性一一对应 核心dom中的属性方法,元素对象都能用 html dom访问html元素的方法(最常用) getelementbyid("id名"); getelementbytagname("tagname名"); //标记,和核心dom中nodename一样 getelementbyclass("class名"); css的dom动态样式 **使用js操作css中的各属性,js只能操作修改行内样式。对于类样式,可以通过classname来赋值。外联式无法操作** **style样式代替css样式** style对象属性与css属性的转换 1.如果是一个单词,则直接写 2.如果是多个单词,则第一个单词全小写,后面每个单词首字母大写,并去掉中划线。 dom中event对象
由于html文档被浏览器解析后就是一棵dom树,要改变html的结构,就需要通过javascript来操作dom。
始终记住dom是一个树形结构。操作一个dom节点实际上就是这么几个操作:
更新:更新该dom节点的内容,相当于更新了该dom节点表示的html的内容;
遍历:遍历该dom节点下的子节点,以便进行进一步操作;
添加:在该dom节点下新增一个子节点,相当于动态增加了一个html节点;
删除:将该节点从html中删除,相当于删掉了该dom节点的内容以及它包含的所有子节点。
在操作一个dom节点前,我们需要通过各种方式先拿到这个dom节点。最常用的方法是document.getelementbyid()和document.getelementsbytagname(),以及css选择器document.getelementsbyclassname()。
由于id在html文档中是唯一的,所以document.getelementbyid()可以直接定位唯一的一个dom节点。document.getelementsbytagname()和document.getelementsbyclassname()总是返回一组dom节点。要精确地选择dom,可以先定位父节点,再从父节点开始选择,以缩小范围。
演示:
// 返回id为'test'的节点:var test = document.getelementbyid('test');
// 先定位id为'test-table'的节点,再返回其内部所有tr节点:var trs = document.getelementbyid('test-table').getelementsbytagname('tr');
// 先定位id为'test-div'的节点,再返回其内部所有class包含red的节点:var reds = document.getelementbyid('test-div').getelementsbyclassname('red');
// 获取节点test下的所有直属子节点:var cs = test.children;
// 获取节点test下第一个、最后一个子节点:var first = test.firstelementchild;
var last = test.lastelementchild;
第二种方法是使用queryselector()和queryselectorall(),需要了解selector语法,然后使用条件来获取节点,更加方便:
// 通过queryselector获取id为q1的节点:var q1 = document.queryselector('#q1');
// 通过queryselectorall获取q1节点内的符合条件的所有节点:var ps = q1.queryselectorall('div.highlighted > p');
注意:低版本的ie<8不支持queryselector和queryselectorall。ie8仅有限支持。
严格地讲,我们这里的dom节点是指element,但是dom节点实际上是node,在html中,node包括element、comment、cdata_section等很多种,以及根节点document类型,但是,绝大多数时候我们只关心element,也就是实际控制页面结构的node,其他类型的node忽略即可。根节点document已经自动绑定为全局变量document。