获取和操作 DOM 节点

获取和操作 DOM 节点

DOM 节点也会被称为 DOM 元素。

 

想要操作 DOM 节点,就必须先获取到 DOM 节点。

 

1. 获取 DOM 节点

获取 DOM 节点的方式有很多,这里例举几个常用的,所有的 DOM 元素都具有以下方法:

 

element.getElementById

element.getElementByName

element.getElementsByTagName

element.getElementsByClassName

element.querySelector

element.querySelectorAll

1.1 element.getElementById

返回对拥有指定 id 的第一个对象的引用。

 

element.getElementById 是指去 element 节点下根据 id 查找子节点。

 

通常在程序开始前,没有主动去获取过节点,这个时候会使用根节点 document 来进行查找。

 

实例演示

预览

复制

<div id="html-element">

  我是一个元素

</div>

 

<script>

  var element = document.getElementById('html-element');

 

  element.innerHTML = '<a href="//imooc.com">我变成了超链接</a>';

</script>

<div id="html-element">

  我是一个元素

</div>

 

<script>

  var element = document.getElementById('html-element');

 

  element.innerHTML = '<a href="//imooc.com">我变成了超链接</a>';

</script>

点击 "运行案例" 可查看在线运行效果

在使用 JavaScript 操作 DOM 节点的时候,也会把 DOM 节点称为 DOM 对象,以契合编程中对象的概念,更好理解。

 

以上例子通过 document.getElementById 获取 id 为 html-element 的 DOM 节点,并通过修改 innerHTML 属性,将这个节点的内容进行了修改。

 

1.2 element.getElementByName

返回带有指定名称的对象集合。

 

element.getElementByName 是通过元素的 name 属性进行查找的,过去操作表单的时候会经常用到。

 

实例演示

预览

复制

<form>

  <div>

    <label>

      <input type="checkbox" name="skill" checked="checked" value="JavaScript"> JavaScript

    </label>

 

    <label>

      <input type="checkbox" name="skill" value="c++"> C++

    </label>

 

    <label>

      <input type="checkbox" name="skill" checked="checked" value="Java"> Java

    </label>

  </div>

</form>

<div id="result"></div>

 

<script>

  var checkboxes = document.getElementsByName('skill');

 

  var skills = [];

 

  checkboxes.forEach(function(checkbox) {

    if (checkbox.getAttribute('checked')) {

      skills.push(checkbox.value);

    }

  });

 

document.getElementById('result').innerHTML = '选中的技能:' + skills.join('、');

</script>

<form>

  <div>

    <label>

      <input type="checkbox" name="skill" checked="checked" value="JavaScript"> JavaScript

    </label>

 

    <label>

      <input type="checkbox" name="skill" value="c++"> C++

    </label>

 

    <label>

      <input type="checkbox" name="skill" checked="checked" value="Java"> Java

    </label>

  </div>

</form>

<div id="result"></div>

 

<script>

  var checkboxes = document.getElementsByName('skill');

 

  var skills = [];

 

  checkboxes.forEach(function(checkbox) {

    if (checkbox.getAttribute('checked')) {

      skills.push(checkbox.value);

    }

  });

 

document.getElementById('result').innerHTML = '选中的技能:' + skills.join('、');

</script>

点击 "运行案例" 可查看在线运行效果

通过 getElementsByName 获取到的是 DOM 节点的集合,需要注意的是,这个集合不是数组类型的,而是 NodeList ,其不具备数组的 map 、filter 等方法,但是具备 forEach 方法。

 

Tips:IE 和早期浏览器的 NodeList 是没有 forEach 方法的,具体版本可以通过 查看。

 

1.3 element.getElementsByTagName

返回带有指定标签名的对象集合。

 

element.getElementsByTagName 是通过标签名获取 DOM 节点的,返回的也是一个集合。

 

实例演示

预览

复制

<div>

  <p>我是第一个段落。</p>

  <p>我是第二个段落。</p>

  <p>我是第三个段落。</p>

  <p>我是第四个段落。</p>

  <p>我是第五个段落。</p>

</div>

<div id="result" style="color: #4caf50;"></div>

<script>

  var pList = document.getElementsByTagName('p');

 

  var res = [];

  var i, len;

  for (i = 0, len = pList.length; i < len; i++) {

 res.push(pList[i].innerText);

  }

  

  document.getElementById('result').innerHTML = '所有 p 标签的内容:<br>' + res.join('<br>');

</script>

<div>

  <p>我是第一个段落。</p>

  <p>我是第二个段落。</p>

  <p>我是第三个段落。</p>

  <p>我是第四个段落。</p>

  <p>我是第五个段落。</p>

</div>

<div id="result" style="color: #4caf50;"></div>

<script>

  var pList = document.getElementsByTagName('p');

 

  var res = [];

  var i, len;

  for (i = 0, len = pList.length; i < len; i++) {

 res.push(pList[i].innerText);

  }

  

  document.getElementById('result').innerHTML = '所有 p 标签的内容:<br>' + res.join('<br>');

</script>

点击 "运行案例" 可查看在线运行效果

此方法返回值的类型是 HTMLCollection ,不是 NodeList ,没有 forEach 方法。

 

可以使用 for 循环对返回值进行遍历。

 

Tips: 特别要注意,此方法为 getElementsByTagName,前往不要忘记有个 s。

 

1.4 element.getElementsByClassName

返回一个包含了所有指定类名的子元素的类数组对象。

 

element.getElementsByClassName 通过元素的类名来获取 DOM 节点。

 

实例演示

预览

复制

<div>

  <div class="odd">1</div>

  <div class="even">2</div>

  <div class="odd">3</div>

  <div class=&

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值