1、DOM 获取元素

一. 基本概念介绍

1. DOM

DOM全称: Document Object Model 既文档对象模型

 1. Document    -->文档, 整个网页
 2. Object 	     -->对象,网页中任何一个标签都是一个对象
 3. Model	     --> 模型,用来描述标签之间的关系

2.DOM树

DOM树, 就是标签之间的关系模型,DOM树的作用就是用来描述标签之间的关系
01.png

  1. 节点
  2. 在DOM树(文档对象模型)中任何的一个标签,标签的属性,标签内容,回车换行,注释都叫节点
  3. 元素
  4. 在DOM树(文档对象模型)中任何一个html标签都叫元素

3.DOM对象

DOM对象本质上是浏览器根据html标签生成的 JS标签对象

  1. DOM对象的本质就是一个html标签
  2. 操作DOM其实就是在操作网页中的标签

二.获取标签(DOM对象)

1. 通过id获取-兼容性最好

  1. 语法

document.getElementById(‘标签id名’);
例如:
var elemt = document.getElementById(one’);

  1. 返回值

document.getElementById(‘标签id名’) 返回得到的结果是一个 DOM对象

  1. 兼容性

任何浏览器都支持

  1. 总结
    1. document.getElementById() 只能根据标签id名获取一个标签
    2. 如果页面中标签id重复(不推荐写法),通过getElementById()只能获取满足条件的第一个标签
    3. 如果考虑兼容性,推荐使用该方式获取标签

2.通过标签名称获取

  1. 语法
<script>

  document.getElementsByTagName('标签名');

  例如:
  var  res =  document.getElementsByTagName('div');

</script>
  1. 返回值
  1. 返回的结果是一个伪数组
  1. 数组中每一个值都是一个具体的DOM标签对象
  1. 总结
    1. getElementsByTagName()中设置的是标签的名字
    2. 返回的结果是一个伪数组,数组中每一个值是一个具体的标签对象
    3. 如果需要获取每一个DOM对象,则可以通过循环遍历

3.通过类名获取

  1. 语法
<script>
document.getElementsByClassName('标签类名');

例如
var  res = document.getElementsByClassName('标签类名');
</script>
  1. 返回值

返回结果是一个伪数组

  1. 总结
    1. getElementsByClassName()设置的是标签类名不是类选择器,类名前面不能加点
    2. 返回的结果是伪数组
    3. 伪数组中每一个值都是一个具体的DOM对象
    4. 如果需要获取每一个DOM对象,则可以通过循环遍历

4.通过选择器获取一个标签

  1. 语法
<script>
   document.querySelector('css选择器');

   例如:

   var  res =  document.querySelector('.one');
</script>
  1. 返回值
  1. 返回的结果是一个DOM标签对象
  1. 如果没有符合条件的标签,则返回的结果是null
  1. 总结
    1. document.querySelector() 支持css中所有的选择器
    2. 返回所有满足条件中的第一个结果

5.通过选择器获取多个标签

  1. 语法
<script>

   console.log(document.querySelectorAll('css选择器'));

   例如:
   var  res = document.querySelectorAll('div')
</script>
  1. 返回值
  1. 返回结果是一个伪数组,数组中每一个值都是一个具体的DOM对象
  1. 如果没有找到符合条件的标签,则返回一个空数组
  1. 总结
    1. 该方法支持所有的css选择器
    2. 返回的结果是一个伪数组

6.课堂案例

image.png

7. 补充获取页面特殊标签

  • 获取body标签

document.body

  • 获取html标签

document.documentElement

三.操作标签属性

1. 操作图片标签src属性

a) 获取图片标签scr属性

步骤:

  1. 先获取图片标签
  2. 通过 图片标签DOM对象.src 获取src
<script>

        var myimg = document.querySelector('img');
        myimg.src


</script>

b) 设置图片标签src属性

步骤:

  1. 先获取图片标签
  2. 通过 图片标签DOM对象.src = 图片路径
<script>


        var myimg = document.querySelector('img');
        myimg.src = './img/1.jpg'


    </script>

c) 课堂案例

随机显示图片.gif

2. 操作a标签href属性

a) 获取a标签href属性

步骤:

  1. 先获取a标签
  2. 通过 DOM标签对象.href 获取href属性值
<body>
   <a href="http://www.baidu.com">百度</a>
   <script>
      console.log(document.querySelector('a').href);
   </script>
</body>

b) 设置a标签href属性

步骤:

  1. 先获取a标签
  2. 通过 DOM标签对象.href = 值 设置
<body>
   <a href="http://www.baidu.com">百度</a>
   <script>
      document.querySelector('a').href = 'http://www.jd.com'
   </script>
</body>

3. 操作标签style样式属性

步骤:

  1. 先获取页面中对应标签
  2. 通过 DOM标签对象.sytle.css属性 = 值
<body>
   <div></div>
   <script>
      var div = document.querySelector('div');
      div.style.width = '200px';
      div.style.height = '200px';
      div.style.background = 'red';
   </script>
</body>

总结:

  1. 标签.style.css属性名 给标签设置的是行内样式
  2. 标签.style.css属性名 css属性名如果遇到 _ 则需要按照驼峰命名法设置
    1. backgroundColor
    2. fontSize
    3. backgroundImage

b)课堂案例

随机色.gif

4. 操作标签类名属性

a) 通过className方式操作类名

步骤:

  1. 先获DOM对象
  2. DOM对象.className 获取标签类名
  3. DOM对象.cassName = ‘类名’ 标签添加类名

代码演示:

<body>
   <div class="one two"></div>
   <script>
      var div = document.querySelector('div');
      console.log(div.className);
   </script>
</body>
<body>
   <div class="one two"></div>
   <script>
      var div = document.querySelector('div');
      div.className = 'three four'
   </script>
</body>

总结:

  1. DOM对象.className 用来操作标签类样式
  2. DOM对象.className 设置标签类名的时候会覆盖标签身上原来的类名
  3. DOM对象.className 设置标签类名如果要设置多个类名,中间使用空格隔开

b) 通过classList方式操作类名

  • 添加类名
  1. 获取标签
  2. DOM标签对象.classList.add(‘类名’)
  3. 代码演示:
<body>
   <div class="one two"></div>
   <script>
      var div = document.querySelector('div');
      div.classList.add('one', 'two')
   </script>
</body>

总结:

  1. classList.add() 添加类名的时候可以添加多个类名,类名之间使用逗号隔开
  2. classList.add() 添加类名不会覆盖标签身上原来的类名
  • 移除类名
  1. 获取标签
  2. DOM标签对象.classList.remove(‘类名’)
  3. 代码演示:
<body>
   <div class="one two"></div>
   <script>
      var div = document.querySelector('div');
      div.classList.remove('one', 'two')
   </script>
</body>
  • 切换类名
  1. 获取标签
  2. DOM标签对象.classList.toggle(‘类名’)
  3. 代码演示:
<body>
   <div class="one two"></div>
   <script>
      var div = document.querySelector('div');
      div.classList.toggle('one')
   </script>
</body>

总结:

  1. 切换类名,标签身上如果包含该类名,则移除,否则添加
  2. 切换类名的时候,不能切换多个类名
  • 是否包含类名
  1. 获取标签
  2. DOM标签对象.classList.contains(‘类名’)
<body>
   <div class="one two"></div>
   <script>
      var div = document.querySelector('div');
      console.log(div.classList.contains('three'))
   </script>
</body>

总结

  1. 标签是否包含类名,包含返回true,否则返回false

5. 操作标签文字内容属性

a) 表单元素文字内容

  • 获取表单元素标签文字内容
<body>
   <input type="input" value="请输入用户名">
   <script>
      // 获取表单元素文字语法:
      // 标签对象.value


      // 例如:
      var int = document.querySelector('input');
      console.log(int.value);
   </script>
</body>
  • 设置表单元素标签文字内容
<body>
   <input type="input" value="请输入用户名">
   <script>
      // 获取表单元素文字语法:
      // 标签对象.value = 值


      // 例如:
      var int = document.querySelector('input');
       int.value = '呵呵呵'
   </script>
</body>

b) 非表单元素文字内容

  • 获取非表单元素标签文字内容
<body>
   <div>我是div标签中的文字</div>
   <script>
      // 获取非表单元素文字语法:
      // 标签对象.innerHTML   或者   标签对象.innerText


      // 例如:
      var res = document.querySelector('div');
      console.log(res.innerHTML);
      console.log(res.innerText);
   </script>
</body>

总结:

  1. innerText 和 innerHTML都可以获取标签中的内容
  2. 如果标签中只有纯文字,则二者无差别
  3. 如果标签中包含其他标签
  4. innerText 只会获取标签中的纯文本
  5. innerHTML 会将标签及内容都获取到
  • 设置非表单元素标签文字内容
<body>
   <div></div>
   <script>
      // 设置非表单元素文字语法:
      // 标签对象.innerHTML = 值  或  标签对象.innerText = 值


      // 例如:
      var res = document.querySelector('div');
      res.innerHTML = '呵呵呵';
      res.innerText = '嘻嘻嘻';
   </script>
</body>

总结:

  1. innerText 和 innerHTML都可以给标签设置文字内容
  2. 如果设置内容不包含其他标签,则二者无差别
  3. 如果设置内容包含标签
    1. innerHTML 会将html内容渲染为对应的html标签
    2. innerText 不会将html内容渲染为对应的html标签,按照普通文本设置

6. 操作标签自定义属性

a) 什么是自定义属性

  1. 标签自定义属性,特指程序员自己给标签添加的自定义属性
  2. 自定义属性两种格式
    1. H5规范要求所有自定义属性必须以data-**开始
    2. 完全自己定义属性,没有任何的格式要求

image.png

  1. 备注:
    1. 标签本身自带的属性叫内置属性或标准属性 例如: class , id, name …

b) 自定义属性有什么用

自定义属性本质上也是一个键值对,用来保存数据

c) 自定义属性如何使用

  • 通用方式
  1. 标签设置自定义属性/标准属性
<body>


   <div></div>


   <script>
      var div = document.querySelector('div');
      // 1. 设置自定义属性
      div.setAttribute('myage', 18);
      div.setAttribute('data-myname', '老段');
      // 2. 设置标准属性
      div.setAttribute('class', 'one');
   </script>
</body>
  1. 获取标签自定义属性/标准属性
<body>


   <div data-myage="18"  myheight="180" class="one"></div>


   <script>
      var div = document.querySelector('div');
      // 1. 获取标签自定义属性
      console.log(div.getAttribute('data-myage'));
      console.log(div.getAttribute('myheight'));
      
      // 2. 获取标签标准属性
      console.log(div.getAttribute('class'));
   </script>
</body>
  • 只能操作H5自定义属性方式
  1. 获取标签自定义属性
    image.png
  2. 标签设置自定义属性

image.png

四.注册事件

1. 什么是事件

当用户在浏览器中操作网页的时候,对网页的点击动作,拖拽动作等都称为事件

2. 事件组成(三要素)

  • 事件源

事件源: 用户动作触发的源头,用户的动作作用到哪个标签身上,该标签就是事件源.
事件源的本质: 事件源本质就是一个DOM标签对象

  • 事件类型

事件类型代表用户不同的动作

  1. 鼠标事件类型: 点击 click
  2. 键盘事件类型
  3. 焦点事件
  • 处理程序(回调函数)

处理程序本质就是一个回调函数(函数),处理程序就是当用户执行完动作后要实现的功能
例如:

  1. 用户点击一个按钮,输出你好
    1. 按钮就是事件源
    2. 点击就是事件类型
    3. 输出你好就是处理程序要做的事情

3. 事件语法

事件源.on事件类型 = function() {}

image.png

4. 事件总结

  • 注册事件时候必须先获取事件源(事件源必须是一个DOM对象)
  • 如果获取到的事件源保存到数组或者伪数组中,则需要进行循环遍历注册事件

5. 事件案例

  1. 点击按钮修改图片的路径

切换图片.gif

  1. 点击按钮修改标签的背景颜色

设置背景颜色.gif

  1. 模拟用户登录

用户登录.gif

  1. 点击按钮设置背景颜色

用户登录.gif

五.this关键字

  • 全局作用域中this指向 window
  • 普通函数中this 指向 window
  • 方法中this 指向方法调用对象
  • 事件中this指向事件源

六.排他思想1

  • tab栏切换

用户登录.gif

  • 完整版tab栏切换

用户登录.gif

七.onload事件

1. 应用场景

代码顺序是从上往下进行加载,很多时候我们要对页面中的某一个模块进行操作,这时候我们常常使用javascript代码来进行操作。为了能够保证操作的模块或对象在js代码之前就加载了,我们不得不把js代码放在页面的底端。但是我们在设计页面的时候,为了把js代码放在一起,或者一个让页面更加简洁的位置,那就有可能将js写在body之前,会出现代码中操作的对象未被加载的情况,那么我们该如何去解决呢?这时候window.onload就被有了存在的意义了。

2. 如何使用onload事件

window.onload = function() {}

3. onload事件总结

  1. window.onload事件当页面中所有资源全局加载完成后才会执行

八.课堂案例

  1. 随机点名

用户登录.gif

  1. 随机切换轮播图

用户登录.gif

  1. 购物车

用户登录.gif

  1. 轮播图小圆点排他样式

用户登录.gif

  1. 开关修改背景色

用户登录.gif

  1. 开关隐藏/显示盒子

用户登录.gif

  1. 运动的风车

用户登录.gif

  1. 隔行变色

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: uniapp是可以使用原生的JavaScript DOM API来获取元素的。可以使用uniapp的各种方法来获取dom元素,包括getElementById()、getElementsByClassName()、getElementsByTagName()等等。 其中,getElementById()可以通过元素的id获取dom元素,getElementsByClassName()可以通过class类名获取元素,而getElementsByTagName()可以通过元素的标签名获取元素。 此外,还可以使用querySelector()和querySelectorAll()方法来获取元素。querySelector()方法可以使用CSS选择器来获取单个元素,而querySelectorAll()方法可以使用CSS选择器来获取多个元素。 对于uniapp开发者来说,获取元素dom的方法并没有太大区别,可以根据具体情况选择最适合的方法来完成获取元素的操作。 需要注意的是,在uniapp中使用DOM API时,需要将其封装成uniapp的API,例如使用uni.createSelectorQuery()进行元素dom的操作,这样才能更好地适配uniapp的框架。 ### 回答2: 在uniapp中获取元素dom的方法和在原生web页面中获取元素dom的方法是不同的。uniapp是一个跨平台的框架,它是基于Vue.js框架开发的,Vue.js封装了一些方法和属性来完成元素dom获取。 在uniapp中获取元素dom,可以使用Vue.js中提供的一些指令和方法。下面我们分别来介绍这些方法和指令。 1. ref指令 在Vue.js中,可以使用ref指令来获取元素dom。ref指令可以给元素命名,然后通过this.$refs.[name]来获取元素dom。 例如: ```html <template> <view ref="myView">Hello uniapp</view> </template> <script> export default { mounted() { const myViewDom = this.$refs.myView; } } </script> ``` 在上面的例子中,我们通过ref指令给view元素命名为myView,然后在mounted生命周期钩子中,通过this.$refs.myView来获取元素dom。 2. $el属性 在Vue.js中,每一个组件都有$el属性,它是该组件渲染后的根元素。通过访问该属性可以获取组件渲染后的dom元素。 例如: ```html <template> <view>uniapp</view> </template> <script> export default { mounted() { const myViewDom = this.$el; } } </script> ``` 在上面的例子中,我们定义了一个view组件,在mounted生命周期钩子中,通过访问this.$el来获取该组件渲染后的dom元素。 需要注意的是,$el属性只有在组件渲染完毕后才能访问。 通过上述方法可以在uniapp中获取元素dom,需要根据实际场景选择合适的方法。 ### 回答3: uniapp是一款优秀的跨平台应用开发框架,它可以帮助开发者快速创建高效、流畅、稳定的应用程序。在uniapp应用开发中,获取元素dom是非常重要的一个功能。 uniapp提供了很多API可以获取元素dom。其中最常用的方法是通过id或者class属性获取。uniapp中可以使用vue.js的$refs对象获取元素的引用,从而进一步获取元素dom。$refs对象是vue.js组件实例的一个属性,不仅可以用于获取元素dom,还可以用于调用组件方法、创建子组件等。 获取元素dom的具体方法如下: 1.通过id属性获取元素dom 在模板中,通过v-bind指令绑定元素id属性,在Vue实例中调用$refs对象获取元素dom。 模板代码: <template> <div> <div :id="'myDiv'"></div> </div> </template> Vue实例代码: mounted() { this.$refs.myDiv.$el //获取元素dom } 2.通过class属性获取元素dom 在模板中,通过v-bind指令绑定元素class属性,在Vue实例中调用$refs对象获取元素dom。 模板代码: <template> <div> <div :class="'myClass'"></div> </div> </template> Vue实例代码: mounted() { this.$refs.myClass[0].$el //获取元素dom } 3.通过组件引用获取元素dom 在子组件的模板中,使用ref属性引用元素,然后在父组件中通过$refs对象获取子组件实例,从而通过子组件实例获取元素dom。 子组件模板代码: <template> <div ref="myDiv"></div> </template> 父组件Vue实例代码: mounted() { this.$refs.myComponent.$refs.myDiv.$el //获取元素dom } 综上所述,uniapp获取元素dom有多种方式,开发者可以根据实际需要选择不同的方式。建议使用vue.js的$refs对象获取元素dom,这样可以方便调用组件方法、创建子组件等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值