DOM (1)

199 阅读3分钟
  • DOM 很难用 (网页其实是一棵树,树就是底下有多个子节点,每个子节点下面又有很多个子节点)
  • JS 如何操作这棵树呢? 浏览器window上加一个document即可(因为JS只能操作JS不能操作网页)

image.png

输入window.document你就得到一个文档,这个document包含了整个文档。只是拿到了一个节点,但是它底下有所有节点,只是拿到了最根的那个节点。

window.document可以获得整个网页的所有元素。

  • JS就是使用document来操纵整个网页,这就是Document Object Model文档对象模型。(DOM)

获取元素,也叫作标签

①获取任意元素

  • 有很多API
window.idXXX 或者直接 idXXX
document.getElementById('idXXX') //这个方法不如上面的方法容易,有的时候有用
document.getElementsByTagName('div')[0]     //尽量不用
document.getElementsByClassName('red')[0]  //尽量不用
document.querySelector('#idxxx')
document.querySelectorAll('red')[0]

用哪一个?

  • 工作中用querySelector和querySelectorAll
  • 做demo直接用idxxx (不要被人发现~)
  • 如果要兼容ie可能要用getElement(s)ByXXX

这个是最简单的方式(常用的方式)window.id名字或者id名字 image.png

如果是修改了 id 的名字的话就需要使用document.getElementById('idXXX')

譬如是我把 id 名字 user_email_control 改成了 blank

那么我运行 window.user_email_control 运行出了 undefined

image.png

那么我就需要使用document.getElementById('blank(被我修改后的id名字)')这样进行获取元素。

image.png

所以大部分情况下,只要你的名字不和全局的属性冲突,你就可以直接用这个id名字来获取元素。如果不小心冲突了那么就使用document.getElementById('idXXX')这样来进行获取

document.getElementsByTagName('div')[0] 这个的意思是找到所有标签名为div的元素。注意这个找到的是数组这里的 element 是带了 s 的!!!所以后面要记得带 [0] 或者 [1] [2] [3] 等等类似的下标才能操作对应的div 当然可以遍历 这个数组标签前面是个伪数组啊!!!

image.png

说明一个问题就是 document.getElementsByTagName('div')这个输入进去你获取到的是一个整体啊,但是你却不能够操作任何一个,因为这个是一个整体。

image.png

document.querySelector('')括号‘’里面的内容可以非常的复杂,css能写的基本都可以写在里面 image.png

②获取特定元素

  • 获取html元素 document.documentElement

image.png

小写标签名字打出来就是大写(dom反人类的地方)

  • 获取head元素 document.head
  • 获取body元素 document.body
  • 获取窗口(窗口不是元素)window 获取的是一个对象,但是有时候要进行对window全局的事件其的监听,那么就会使用到。 例如
window.onclick => (){
console.log('hi');}
  • 获取所有元素 document.all 这个document.all比较奇怪,第6个falsy值

image.png if(document.all){console.log(3)}else{console.log(4)}

说明了一个问题,document.all这个对象是假的,因为打印出了4 image.png

是因为document.all是否存在用来检测当前页面是不是ie浏览器

image.png

document.all[下标] 如果直接用的确可以直接进行查找元素

image.png

获取到的元素都是一个对象, 要搞清楚它的原型