zoukankan      html  css  js  c++  java
  • DOM

    JS中的DOM操作:盒子模型

    DOM 提供属性和方法来操作页面中的元素

    获取元素属性和方法

     document.getElementById(id); //这个只能在document的上下文中获取元素
     [context].getElementsByTagName([Tag-Name]);
     [context].getElementsByClassName([Class-Name]); //在IE6-8中不兼容
     [context].getElementsByName([Name]) //在IE中只对表单的name起作用
    
    
    
    // 在IE6-8中不兼容
     [context].querySelector([selector])
     [context].querySelectorAll([selector])
    

    获取元素的属性

    document
    document.documentElement (获取HTML元素节点,这里HTML作为一个节点)
    document.head
    document.body
    
    childNodes 所有子节点
    children 所有元素子节点
    // 在IE6~8中会把注释节点当做元素节点
    
    parentNode
    firstChild / firstElementChild
    lastChild / lastElementChild
    previousSibling / previousElementsSibling
    nextSibling / nextElementsSibling
    // 所有带element都不兼容IE6~8
    

    DOM的增加删除修改

    // 创建元素
    document.createElement([TagName])
    document.createTextNode([TEXTCONTENT])
    字符串拼接,基于innerText / innerHTML 存放到容器中
    document.createDocumentFragment() // 集中加入domTree
    
    
    // 增加元素
    [parent].appendChild([child])
    [parent].insertBefore([element], [new-element]); 将new-element放在element之前
    [elment].cloneNode([true/false])
    [parent].removeChild([element])
    
    // 属性设置
    // 放在堆内存中的,将页面元素看成是一个对象
    [element].xxx = xxx
    console.log([element].xxx);
    delete [element].xxx
    
    // 可以体现在标签上
    [element].setAttribute()
    [element].getAttribute()
    [element].removeAttribute()
    

    获取元素样式和操作样式

    // 修改元素样式
    [element].style.xxx = xxx; 修改行内样式
    [element].style.className = xxx; 设置样式类别
    
    
    // 获取原始样式 style对象的属性
    let w = box.style.width; //=> 获取的是当前元素写在行内的样式
    如果有这个样式但是没有写在行内上,则无法获取
    

    JS盒子模型

    基于一些属性和方法,让我们获取元素的样式信息
    clientWidth offsetWidth等

    • client
      • height / width
      • top / left
    • offset
      • width / height
      • top / left
      • parent 父级参照物
    • scroll
      • width / height
      • top / left
    window.getComputedStyle([element],[伪类]) / [element].currentStyle
    let box = document.getElmentById('box');
    
    
    // content-box 传统盒模型 设置宽高的时候只是内容的宽高
    // border-box 新的盒子模型  方便开发中使用-不用手动调整
    // 切换 box-sizing
    
    
    // 获取盒子可视区域的宽度高度(内容 + 左右或者上下padding)
    box.clientWidth; 
    box.clientHeight;
    // 内容溢出对盒子的大小没有影响
    // 获取的结果是没有单位的----其余的盒模型属性也是
    // 获取的结果是整数,四舍五入到整数---其余盒模型的属性也是
    
    // 获取的是当前屏幕的可视化宽高
    document.documentElement.clientHeight;
    document.documentElement.clientWidth;
    
    let windowWidth = document.body.clientWidth || document.documentElement.clientWidth;
    
    // 获取左边框和上边框的大小
    // 没有bottom和right
    box.clientWidth;
    box.clientHeight;
    
    // 在client的基础上加上border, 及时盒子本身的宽高
    let box = document.getElementById('box')
    box.offsetWidth;
    box.offsetHeight;
    
    // 没有溢出的情况下,获取的结果和client一样
    // 有溢出的情况下,获取的结果约等于(不同浏览器的结果同,overflow的值会影响结果)
    // 真是内容的宽高(上、左padding + 真是内容的宽度/高度)
    box.scrollHeight;
    box.scrollWidth;
    
    // 获取整个页面真实的高度
    document.documentElement.scrollHeight;
    document.documentElement.scrollWidth;
    document.body.scrollHeight;
    document.body.scrollWidth;
    
    
    // scrollTop 滚动条蜷曲的部分长度
    box.scrollTop; // 竖向
    box.scrollLeft; // 横向
    
    let box = document.getElementById('box')
    // 竖向的滚动条蜷去的高度
    // 横向滚动条卷去的高度
    // 1. 边界值
    // min = 0
    // max = 整个的高度scrollHeight - 屏幕的高度(clientHeight)
    box.scrollHeight;
    box.scrollWidth;
    // 13个盒子模型属性,只有上面两个是可读写的属性
    // 其余的都是只读属性,不能够设置值
    
    // 应用:
    // 回到顶部
    box.scrollHeight = 0;
    // 快速定位到底部
    box.scrollTop = box.scrollHeight - box.clientHeight;
    
    box.offsetParent;//取父级的参照物(不一定是父元素)
    父级参照物的查找,同一个平面中最外层的元素是所有后代的父级参照物
    box.offsetTop; //距离父级参照物的上偏移
    box.offsetLeft; //距离父级参照物的左偏移 (当前元素的外边框到父级参照物的里边框)
    
    document.body.offsetParent = null; 到body处就结束了
    // 区别于浮动的情况, 浮动后位置还占,相当于一个映射的位置
    
    

    getComputedStyle

    获取当前元素所有经过浏览器计算后的样式
    哪怕你没有设置和见过的样式也都计算了
    不管你写或者不写,也不论卸载哪里,均可以使用getComputedStyle获取
    在IE6-8下不兼容,需要基于currentStyle获取

    // 第一个参数是要操作的元素,第二个参数是元素的伪类 :after / :before
    // 获取的是一个对象 CSSStyleDeclearation
    let styleObj = window.getComputedStyle([element],null)
    // 获取值
    styleObj['backgroundColor']
    styleObj.display
    
    // 兼容IE 6-8
    styleObj = [element].currentStyle;
    
    慢慢来,比较快!基础要牢,根基要稳!向大佬致敬!
  • 相关阅读:
    软件开发人员的简历项目经验怎么写?
    mapreduce 多种输入
    lnmp如何实现伪静态,默认目录伪静态
    LNMP环境中WordPress程序伪静态解决方案
    wordpress必装的插件 wp最常用的十个插件
    debian系统下改语言设置
    Centos7 开启端口
    EventProcessor与WorkPool用法--可处理多消费者
    Disruptor入门
    Disruptor初级入门
  • 原文地址:https://www.cnblogs.com/rookie123/p/14410220.html
Copyright © 2011-2022 走看看