获取元素的属性和方法

  1. document.getElementById([ID])
  2. [context].getElementsByTagName([TAG-NAME])
  3. [context].getElementsByClassName([CLASS-NAME])
  4. //=>在IE6~8中不兼容
  5. document.getElementsByName([NAME])
  6. //=>在IE浏览器中只对表单元素的NAME有作用
  7. [context].querySelector([SELECTOR])
  8. [context].querySelectorAll([SELECTOR])
  9. //=>在IE6~8中不兼容
  10. //---------------------
  11. document
  12. document.documentElement
  13. document.head
  14. document.body
  15. childNodes 所有子节点
  16. children 所有元素子节点
  17. //=>IE6~8中会把注释节点当做元素节点获取到
  18. parentNode
  19. firstChild / firstElementChild
  20. lastChild / lastElementChild
  21. previousSibling / previousElementSibling
  22. nextSibling / nextElementSibling
  23. //=>所有带Element的,在IE6~8中不兼容

DOM的增删改操作

  1. document.createElement([TAG-NAME])
  2. document.createTextNode([TEXT CONTENT])
  3. 字符串拼接(模板字符串),基于innerHTML/innerText存放到容器中
  4. [PARENT].appendChild([NEW-ELEMENT])
  5. [PARENT].insertBefore([NEW-ELEMENT],[ELEMENT])
  6. [ELEMENT].cloneNode([TRUE/FALSE])
  7. [PARENT].removeChild([ELEMENT])
  8. //=>设置自定义属性
  9. [ELEMENT].xxx=xxx;
  10. console.log([ELEMENT].xxx);
  11. delete [ELEMENT].xxx;
  12. [ELEMENT].setAttribute('xxx',xxx);
  13. console.log([ELEMENT].getAttribute('xxx'));
  14. [ELEMENT].removeAttribute('xxx');

获取元素样式和操作样式

  1. //=>修改元素样式
  2. [ELEMENT].style.xxx=xxx; //=>修改和设置它的行内样式
  3. [ELEMENT].className=xxx; //=>设置样式类
  4. //=>获取元素的样式
  5. console.log([ELEMENT].style.xxx); //=>获取的是当前元素写在行内上的样式,如果有这个样式,但是没有写在行内上,则获取不到

js盒子模型属性

基于一些属性和方法,让我们能够获取到当前元素的样式信息,例如:clientWidth 、offsetWidth等

方法:window.getComputedStyle([ELEMENT],[伪类]) / [ELEMENT].currentStyle

clintHeight|clientWidth

  1. let box = document.getElementById('box');
  2. //=>获取盒子可视区域的宽高(内容宽度+左右PADDING)
  3. //1.内容溢出与否对他无影响
  4. //2.获取的结果是没有单位的(其余的盒模型属性也是)
  5. //3.获取的结果是整数,它会自己进行四舍五入(其余的盒模型属性也是)
  6. box.clientWidth
  7. box.clientHeight
  8. //获取当前页面一频幕(可视化)区域的宽高
  9. let winW = document.documentElement.clientWidth || document.body.clientWidth;
  10. let winH = document.documentElement.clientHeight || document.body.clientHeight;

clientLeft|clientTop:获取盒子左边框和上边框的大小

offsetWidth|offsetHeight

  1. let box=document.getElementById('box');
  2. //在client的基础上加上border==盒子本身的宽高

scrollWidth|scrollHeight

  1. //在没有内容溢出的情况下,获取的结果和client是一样的
  2. //在有内容溢出的情况下,获取的结果约等于真实内容的宽高(上/左padding+真实内容的高度/宽度)
  3. //1. 不同浏览器获取的结果不尽相同
  4. //2.设置overflow属性值对最后的结果也会产生一定的影响
  5. //获取整个页面真实的高度
  6. document.documentElement.scrollHeight || document.body.scrollHeight

offsetParent

  1. //=>offsetParent:获取它的父参照物(不一定是父元素)
  2. //父参照物和它的父元素没有必然的联系,父参照物查找:同一个平面中,最外层元素是所有后代元素的父参照物,
  3. 而基于position:relative/absolute/fixed可以让元素脱离文档流(一个新的平面),从而改变元素的父参照
  4. document.body.offsetParent === null;

offsetTop|offsetLeft

  1. //offsetTop:距离其父级参照物的上偏移
  2. //offsetLeft:距离其父级参照物的左偏移(当前元素的外边框到父参照物的内边框)
  3. //offset:获取当前元素距离body的左|上偏移(不论其父级参照物是谁)
  4. /*
  5. @params
  6. * curEle:current element当前要操作的元素
  7. * @return
  8. * [object]包含上/左偏移的信息 => {top:xxx,left:xxx}
  9. */
  10. function offset(curEle){
  11. let par=curEle.offsetParent,
  12. l=curEle.offsetLeft,
  13. t=curEle.offsetTop;
  14. //存在父参照物,而且还没有找到body
  15. while(par&&par.tagName!=="BODY"){
  16. //在原有偏移的基础上累加:父参照物的边框,父参照物的偏移
  17. if(!/MSIE 8\.0/.test(navigator.userAgent)){
  18. //ie8中偏移值自己就算边框,不需要再加边框
  19. i+=par.clientLeft;
  20. t+=par.clientTop;
  21. }
  22. i+=par.offsetLeft;
  23. t+=par.offsetTop;
  24. }
  25. return{
  26. top:t,
  27. left1
  28. }
  29. }

getComputedStyle

  1. //获取当前元素所经过浏览器计算过的样式
  2. //只要元素在页面中呈现出来,则所有的样式都是经过浏览器计算的
  3. //即使没有设置和见过的样式也都会被计算出来
  4. //样式存在,可以直接获取
  5. //ie6-8浏览器中不兼容,需要基于currentStyle获取
  6. //第一个参数是操作的元素 第二个参数是元素的伪类:after/:before
  7. //获取的结果是CSSStyleDeclaration这个类的实例(对象),包含当前元素所有的样式信息
  8. let styleObj=wiindow.getComputedStyle([element],null);
  9. styleObj['backgroundColor']
  10. styleObj.display
  11. //styleObj=[element].currentStyle