关于Web APIs中的DOM操作——获取元素、操作元素

获取元素

DOM在我们实际开发中主要用来操作元素。那么该如何来获取页面中的元素呢?
获取页面中的元素可以使用以下几种方式:

  • 根据ID获取
  • 根据标签名获取
  • 通过HTML5新增的方法获取
  • 特殊元素获取

根据ID获取

使用getElementById()方法可以获取带有ID的元素对象。
语法: var element = document.getElementById(id);

  1. element是一个 Element 对象。如果当前文档中拥有特定ID的元素不存在则返回null.
  2. ID是大小写敏感的字符串,代表了所要查找的元素的唯一ID.
  3. 返回一个匹配到 ID 的 DOM Element 对象。若在当前 Document 下没有找到,则返回null
<body>
<div id="get">获取带有ID的元素对象</div>
<script>
    var get = document.getElementById('get');
    get.style.color = 'red';
</script>
</body>

根据标签名获取

使用getElementsByTagName0方法可以返回带有指定标签名的对象的集合。
语法:document.getElementsByTagName ( '标签名');

<script>
    var lis = document.getElementsByTagName('li');
    for(var i = 0;i < lis.length;i++){
        console.log(lis[i]);
    }
</script>

注意:

  1. 因为得到的是一个对象的集合,所以想要操作里面的元素就需要遍历。
  2. 得到元素对象是动态的,如果 li 里面内容变化,获取来的内容也会跟着变化
  3. 如果页面中只有一个 li 返回的还是伪数组的形式
  4. 如果页面中没有这个元素返回的是 空的伪数组的形式

还可以获取某个元素(父元素)内部所有指定标签名的子元素。element.getElementsByTagName ('标签名') ;

注意: 元素必须是单个对象(必须指明是哪一个元素对象).获取的时候不包括父元素自己。

<script>
    var ul = document.getElementsByTagName('ul');//得到一个伪数组
    console.log(ul.getElementsByTagName('li'));//报错,element必须是单个元素
    // 正确写法,给ul 添加一个ID名
    var ul = document.getElementById('get');
    console.log(ul.getElementsByTagName('li'));
</script>

通过HTML5新增的方法获取

  1. 根据类名返回元素对象集合
    语法:var elements = document.getElementsByClassName(names) ;
  • names是一个字符串,表示要匹配的类名列表;类名通过空格分隔
  • getElementsByClassName 可以在任何元素上调用,不仅仅是document。调用这个方法的元素将作为本次查找的根元素.
  1. 返回指定选择器的第一个元素对象(常用方法)
    语法:var element = document.querySelector(selectors);
  • selectors是一组用来匹配element 后代元素的选择器.
  • 里面的选择器需要加符号,如".nav" 、"#nav"
  1. 返回指定选择器的所有元素对象
    语法:var element = document.querySelectorAll(selectors);

特殊元素获取

  1. 获取body元素: doucument.body ; 返回body元素对象

  2. 获取html元素: document.documentElement; 返回html元素对象

操作元素

改变元素内容

  1. element.innerText从起始位置到终止位置的内容但它去除html标签,同时空格和换行也会去掉
  2. element.innerHTML起始位置到终止位置的全部内容,能识别html标签,同时保留空格和换行,W3C推荐标准
var sp = document.querySelector('span');
sp.innerHTML = '<strong>我是</strong>:   标签';
console.log(sp.innerText);
console.log(sp.innerHTML);

效果显示:

在这里插入图片描述

常用元素的属性操作

修改元素属性,如图片的src、链接的href、id、alt、title

<script >
        var btn = document.querySelector('button');
        var img = document.querySelector('img');
        //点击按钮  切换图片
        btn.addEventListener('click',function () {
            img.src = 'images/picture.png';
        })
</script>

表单元素的属性操作

利用DOM可以操作如下表单元素的属性: type、value、checked、 selected、 disabled 。不能用innerHTML,表单里面的值或者文字是通过value修改的

<script>
     var btn = document.querySelector('button');
     var inp = document.querySelector('input');
     btn.onclick = function () {
        inp.value = '内容已提交';
        this.disabled = true;//表单被禁用,不能再点击
        //this指向的是事件函数的调用者 btn
    }
 </script>

样式属性操作

我们可以通过JS修改元素的大小、颜色、位置等样式。

  1. element.style 行内样式操作
  2. element.className 类名样式操作
<script>
        var div = document.querySelector('div');
        div.addEventListener('click',function () {
	        div.style.backgroundColor = 'red';//给div添加背景颜色
	        div.className = 'nav'; //给div添加类名,之前的类名会被覆盖
        }
</script>

注意:

  1. JS里面的样式采取驼峰命名法比如fontSize、backgroundColor
  2. JS修改style样式操作,产生的是行内样式, Css权重比较高
  3. 如果样式修改较多,可以采取操作类名方式更改元素样式。
  4. class因为是个保留字,因此使用className来操作元素类名属性
  5. className会直接更改元素的类名,会覆盖原先的类名。
  6. 如果想要保留原来的样式,可以使用多类名选择器

排他思想

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

  1. 所有元素全部清除样式(干掉其他人)
  2. 给当前元素设置样式(留下我自己)
<script >
    var btns = document.getElementsByTagName('button');
    //btns得到的是一个伪数组  要循环给每一个按钮添加点击事件
    for(var i = 0;i < btns.length;i++){
        btns[i].addEventListener('click',function () {       
	        for (var j = 0;j <btns.length;j++){
	              btns[j].style.backgroundColor = '';// 循环先去掉所有按钮背景颜色
	        }
	        this.style.backgroundColor = 'red';//留下当前按钮背景颜色
        })
    }
    </script>

效果显示:
在这里插入图片描述

自定义属性的操作

  1. 获取属性值
  • element.属性获取内置属性值(元素本身自带的属性)
  • element.getAttribute(‘属性');主要获得自定义的属性 ( 标准)程序员自定义的属性
  1. 设置属性值
  • element.属性= '值' 设置内置属性值。
  • element. setAttribute('属性','值');主要设置自定义的属性 ( 标准)
  1. 移除属性
  • element. removeAttribute(‘属性’) ;
<script >
    var div = document.querySelector('div');
    console.log(div.id);// element.属性 获取属性值
    console.log(div.getAttribute('index'));//element.getAttribute获取自定义属性
    div.id = 'test';//element.属性 = '值'  设置元素属性值
    div.setAttribute('index', 2);//element. setAttribute('属性','值');设置自定义属性
    div.removeAttribute('index');//移除属性
</script>

H5自定义属性

自定义属性目的: 为了保存并使用数据。有些数据可以保存到页面中而不用保存到数据库中。自定义属性获取是通过getAttribute(‘属性’)获取。但是有些自定义属性很容易引起歧义,不容易判断是元素的内置属性还是自定义属性。所以H5规定自定义属性data开头做为属性名并且赋值

  1. 设置H5自定义属性
    H5规定自定义属性data开头做为属性名并且赋值。
    比如<div data-index=“1" > </div>或者使用JS设置element.setAttribute(‘data-index’, 2)
  2. 获取H5自定义属性
  • 兼容性获取element.getAttribute( 'data-index' );
  • H5新增 element.dataset.index或者element.dataset[ 'index'] 但这个要 ie 11才开始支持
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值