zoukankan      html  css  js  c++  java
  • JS操作DOM、BOM

    1、JS(或浏览器中执行的JS)= JS基础知识(ECMA262标准)+ JS-Web-API(W3C标准)

    1)JS-Web-API( W3C 的标准)

    - DOM 操作
    - BOM 操作
    - 事件绑定
    - ajax 请求(包括 http 协议)
    - 存储

    2)“JS基础知识”也叫做“ES基础知识”( ECMA-262 标准)

    - 变量类型和计算
    - 原型和原型链
    - 闭包和作用域
    - 异步和单线程
    - 其他(如日期、Math、各种常用API)

    2、DOM

    1)DOM 的本质

    开发完的 html 代码会保存到一个文档中(一般以`.html`或者`.htm`结尾),文档放在服务器上,浏览器请求服务器,这个文档被返回。因此,最终浏览器拿到的是一个文档而已,文档的内容就是 html 格式的代码。

    但是浏览器要把这个文档中的 html 按照标准渲染成一个页面,此时浏览器就需要将这堆代码处理成自己能理解的东西,也得处理成 JS 能理解的东西,因为还得允许 JS 修改页面内容呢。

    基于以上需求,浏览器就需要把 html 转变成 DOM,html 是一棵树,DOM 也是一棵树。对 DOM 的理解,可以暂时先抛开浏览器的内部因此,先从 JS 着手,即可以认为 DOM 就是 JS 能识别的 html 结构,一个普通的 JS 对象或者数组。

    2)DOM 节点操作

    // 获取 DOM 节点
    
    var div1 = document.getElementById('div1') // 元素
    var divList = document.getElementsByTagName('div')  // 集合
    console.log(divList.length)
    console.log(divList[0])
    
    var containerList = document.getElementsByClassName('.container') // 集合
    var pList = document.querySelectorAll('p') // 集合
    

     

    prototype和Attribute的区别和联系
    prototype:DOM 节点就是一个 JS 对象,它符合之前讲述的对象的特征 ———— 可扩展属性
    
    var pList = document.querySelectorAll('p')
    var p = pList[0]
    console.log(p.style.width)  // 获取样式
    p.style.width = '100px'  // 修改样式
    console.log(p.className)  // 获取 class
    p.className = 'p1'  // 修改 class
    
    // 获取 nodeName 和 nodeType
    console.log(p.nodeName)
    console.log(p.nodeType)
    
    Attribute:property 的获取和修改,是直接改变 JS 对象,而 Attibute 是直接改变 html 的属性。两种有很大的区别
    
    var pList = document.querySelectorAll('p')
    var p = pList[0]
    p.getAttribute('data-name')
    p.setAttribute('data-name', 'imooc')
    p.getAttribute('style')
    p.setAttribute('style', 'font-size:30px;')

    3)获取DOM树

    //新增节点
    var div1 = document.getElementById('div1')
    
    // 添加新节点
    var p1 = document.createElement('p')
    p1.innerHTML = 'this is p1'
    div1.appendChild(p1) // 添加新创建的元素
    
    // 移动已有节点
    var p2 = document.getElementById('p2')
    div1.appendChild(p2)
    
    
    //获取父元素
    var div1 = document.getElementById('div1')
    var parent = div1.parentElement
    
    //获取子元素
    var div1 = document.getElementById('div1')
    var child = div1.childNodes
    
    //删除节点
    var div1 = document.getElementById('div1')
    var child = div1.childNodes
    div1.removeChild(child[0])
    

     3、BOM

    1)BOM的本质

    DOM 是浏览器针对下载的 HTML 代码进行解析得到的 JS 可识别的数据对象。而 BOM(浏览器对象模型)是浏览器本身的一些信息的设置和获取,例如获取浏览器的宽度、高度,设置让浏览器跳转到哪个地址。

    - navigator
    - screen
    - location
    - history

    2)常用API

    / navigator
    var ua = navigator.userAgent
    var isChrome = ua.indexOf('Chrome')
    console.log(isChrome)
    
    // screen
    console.log(screen.width)
    console.log(screen.height)
    
    // location
    console.log(location.href)
    console.log(location.protocol) // 'http:' 'https:'
    console.log(location.pathname) // '/learn/199'
    console.log(location.search)
    console.log(location.hash)
    
    // history
    history.back()
    history.forward()
    

    3)常用场景

    //检测浏览器的类型
    
    var ua = navigator.userAgent
    var isChrome = ua.indexOf('Chrome')
    console.log(isChrome)
    
    //拆解url的各部分
    
    console.log(location.href)
    console.log(location.protocol) // 'http:' 'https:'
    console.log(location.pathname) // '/learn/199'
    console.log(location.search)
    console.log(location.hash)
    

      

      

  • 相关阅读:
    C# 以管理员身份运行程序
    C# 全局热键设置 与 窗体热键设置
    C# Math类详细说明
    WIN7命令工具大全
    jQuery Validation ,调用valid方法时,不验证remote
    Nopcommerce4.2解析——安装
    MVC授权不通过之后不执行任何自定义ActionFilter
    《将博客搬至CSDN》
    Unity开发者的C#内存管理(中篇)
    Unity开发者的C#内存管理(上篇)
  • 原文地址:https://www.cnblogs.com/shary-blue/p/14039412.html
Copyright © 2011-2022 走看看