欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JavaScript之DOM_动力节点Java学院整理

程序员文章站 2022-06-09 08:48:47
由于html文档被浏览器解析后就是一棵dom树,要改变html的结构,就需要通过javascript来操作dom。 始终记住dom是一个树形结构。操作一个dom节点实际上...

由于html文档被浏览器解析后就是一棵dom树,要改变html的结构,就需要通过javascript来操作dom。
始终记住dom是一个树形结构。操作一个dom节点实际上就是这么几个操作:

  1. 更新:更新该dom节点的内容,相当于更新了该dom节点表示的html的内容;
  2. 遍历:遍历该dom节点下的子节点,以便进行进一步操作;
  3. 添加:在该dom节点下新增一个子节点,相当于动态增加了一个html节点;
  4. 删除:将该节点从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不支持queryselectorqueryselectorall。ie8仅有限支持。

严格地讲,我们这里的dom节点是指element,但是dom节点实际上是node,在html中,node包括elementcommentcdata_section等很多种,以及根节点document类型,但是,绝大多数时候我们只关心element,也就是实际控制页面结构的node,其他类型的node忽略即可。根节点document已经自动绑定为全局变量document

练习

如下的html结构:

javascript
java
python
ruby
swift
scheme
haskell

<!-- html结构 -->
<div id="test-div">
<div class="c-red">
  <p id="test-p">javascript</p>
  <p>java</p>
 </div>
 <div class="c-red c-green">
  <p>python</p>
  <p>ruby</p>
  <p>swift</p>
 </div>
 <div class="c-green">
  <p>scheme</p>
  <p>haskell</p>
 </div>
</div>

请选择出指定条件的节点:

// 选择<p>javascript</p>:
var js = ???;
// 选择<p>python</p>,<p>ruby</p>,<p>swift</p>:
var arr = ???;
// 选择<p>haskell</p>:
var haskell = ???;