获取元素、获取节点-DOM技术

本文详细介绍了DOM的基本概念,包括文档、元素和节点的定义,并展示了如何通过DOM方法获取和操作元素,如获取父元素、子元素、兄弟元素等。此外,还讲解了如何改变元素内容、属性和样式,以及使用事件处理程序。最后,提到了排他思想在编程中的应用,特别是在元素样式的切换中。

1、DOM介绍

DOM 是document object model 它是W3C产业联盟制定的浏览器对程序员提供的对HTML文档操作的接口
在这里插入图片描述

  • 文档:一个页面就是一个文档,DOM中使用doucument来表示
  • 元素:页面中的所有标签都是元素,DOM中使用 element 表示
  • 节点:网页中的所有内容都是节点(标签,属性,文本,注释等),DOM中使用node表示

把文档中的代码翻译成一个对象模型
在这个模型中 所有相关的标签属性注释文本等等12种数据 都翻译为一种类型的对象 统称节点对象
这些对象之间在文档模型数据结构中存在某种关系: 根节点 父子节点 同胞节点等等
1.只有一个根节点document
2.除了根节点外所有节点都有唯一的一个父节点
3.document是window对象的属性
4.全局对象模型属于BOM操作 Browser Object Model 把浏览器对外提供的接口翻译为一个对象
BOM操作会在接下来的知识点讲到 它不属于标准的接口 但是浏览器厂商都提供了几乎一样的功能
5.元素的属性也是独立节点 叫属性节点 但是不是元素节点的子节点

2、如何获取元素、节点

2.1、获取元素方法

//旧方法
document.getElementById//查找速度最快 -ID
document.getElementsByClassName -class名
document.getElementsByName -元素name属性名
document.getElementsByTagName -标签名
//H5出的新方法
document.querySelector -选择器名 符合条件的第一个元素
document.querySelectorAll -符合条件的全部元素
//不建议使用
直接使用标签的id作为节点对象引用  查找速度最快

系统提供的直接获取方式:
document.body  //body标签
document.forms  //form表单们
document.anchors //a标签们
document.images //图片们
document.links //连接们
document.URL //当前文档的网址

2.2、通过关系获取元素、节点

2.2.1、获取父元素、父节点
var box5 = document.querySelector("#box5")
console.log(box5.parentElement)
//获取元素的父元素
console.log(box5.parentNode)
//获取节点的父节点
2.2.2、获取子元素、子节点
     var box4 = document.querySelector("#box1");
      var arr = box4.children; //子元素们
      var arr2 = box4.childNodes; //子节点们
2.2.3、获取弟弟元素、弟弟节点
     var box = document.querySelector("#box4")
      console.log(box.nextElementSibling) //弟弟元素
      console.log(box.nextSibling) //弟弟节点
2.2.4、获取哥哥元素、哥哥节点
     var box6 = document.querySelector("#box6")
      console.log(box6.previousElementSibling) //哥哥元素
      console.log(box6.previousSibling) //哥哥节点
2.2.5、获取第一个子元素
      var box = document.querySelector("#box4")
      console.log(box.firstElementChild)//第1个子元素
      console.log(box.firstChild)//第1个子节点
2.2.6、获取最后一个子元素
     var box = document.querySelector("#box4");
      box.children[box.children.length - 1];
      box.childNodes[box.childNodes.length - 1];
      console.log(box.lastElementChild)//最后一个子元素
      console.log(box.lastChild)//最后一个子节点
2.2.7、获取父元素中的第几个子元素/节点
var son1=document.getElementById("box1").children[1]//第二个子元素
var son2=document.getElementById("box1").childNodes[1]//第二个子节点
2.2.8、获取这个元素是同胞中的第几个
   Object.prototype.indexof1 = function () {
        var arr = this.parentElement.children;
        for (let i = 0; i < arr.length; i++) {
          if (arr[i] === this) {
            return i;
          }
        }
      };
      var box = document.querySelector("#box6");
      console.log(box.indexof1());

3、操作元素

3.1、改变元素内容-innerText、innerHTML

element.innerText
从起始位置到终止位置的内容,但它不包括HTML标签,同时空格和换行也会去掉。
element.innerHTML
起始位置到终止位置的全部内容,包括HTML标签,同时空格和换行也会去掉。
<body>
    <div></div>
    <p>
        我是文字
        <span>123</span>
    </p>
    <script>
        // innerText 和 innerHTML的区别 
        // 1. innerText 不识别html标签,去除空格和换行
        var div = document.querySelector('div');
        div.innerText = '<strong>今天是:        </strong> 2019';
        // 2. innerHTML 识别html标签 保留空格和换行的
        div.innerHTML = '<strong>今天是:        </strong> 2019';
        // 这两个属性是可读写的  可以获取元素里面的内容
        var p = document.querySelector('p');
        console.log(p.innerText);
        console.log(p.innerHTML);
    </script>
</body>

结果:
在这里插入图片描述

3.2、改变元素属性

// img.属性
img.src = "xxx";

input.value = "xxx";
input.type = "xxx";
input.checked = "xxx";
input.selected = true / false;
input.disabled = true / false;

3.3、改变样式属性

  • 行内样式操作
// element.style
div.style.backgroundColor = 'pink';
div.style.width = '250px';
  • 类名样式操作
// element.className
Ps:
  1. JS里面的样式采取驼峰命名法,比如 fontSize ,backgroundColor
  2. JS 修改 style 样式操作 ,产生的是行内样式,CSS权重比较高
  3. 如果样式修改较多,可以采取操作类名方式更改元素样式
  4. class 因为是个保留字,因此使用className来操作元素类名属性
  5. className 会直接更改元素的类名,会覆盖原先的类名

3.4、案例

   <div class="first">文本</div>
    <script>
      // 1. 使用 element.style 获得修改元素样式 如果样式比较少或者功能
      //简单的情况下使用
      var test = document.querySelector("div");

      test.style.backgroundColor = "purple";
      test.style.color = "#fff";
      test.style.fontSize = "100px";
      test.style.marginTop = "100px";
      // 让我们当前元素的类名改为了 change

      // 2. 我们可以通过 修改元素的className更改元素的样式 
      //适合于样式较多或者功能复杂的情况
      // 3. 如果想要保留原先的类名,我们可以这么做 多类名选择器
      // test.className = 'change';
      // test.className = "first change";
    </script>

4、事件

4.1、事件三要素

  1. 事件源(谁)
  2. 事件类型(什么事件)
  3. 事件处理程序(做啥)
<script>
// 点击一个按钮,弹出对话框
// 1. 事件是有三部分组成  事件源  事件类型  事件处理程序   我们也称为事件三要素
//(1) 事件源 事件被触发的对象   谁  按钮
    var btn = document.getElementById('btn');
//(2) 事件类型  如何触发 什么事件 比如鼠标点击(onclick) 还是鼠标经过 还是键盘按下
//(3) 事件处理程序  通过一个函数赋值的方式 完成
    btn.onclick = function() {
        alert('点秋香');
    }
</script>

5、排他思想

5.1、排他思想定义

如果有同一组元素,我们相要某一个元素实现某种样式,需要用到循环的排他思想算法:

  1. 所有元素全部清除样式(干掉其他人)
  2. 给当前元素设置样式 (留下我自己)
  3. 注意顺序不能颠倒,首先干掉其他人,再设置自己

5.2、案例

<body>
    <button>按钮1</button>
    <button>按钮2</button>
    <button>按钮3</button>
    <button>按钮4</button>
    <button>按钮5</button>
    <script>
        // 1. 获取所有按钮元素
        var btns = document.getElementsByTagName('button');
        // btns得到的是伪数组  里面的每一个元素 btns[i]
        for (var i = 0; i < btns.length; i++) {
            btns[i].onclick = function() {
                // (1) 我们先把所有的按钮背景颜色去掉  干掉所有人
                for (var i = 0; i < btns.length; i++) {
                    btns[i].style.backgroundColor = '';
                }
                // (2) 然后才让当前的元素背景颜色为pink 留下我自己
                this.style.backgroundColor = 'red';

            }
        }
        //2. 首先先排除其他人,然后才设置自己的样式 这种排除其他人的思想我们成为排他思想
    </script>
</body>

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值