JavaScript BOM/DOM

一、BOM
(1) 认识BOM
BOM:浏览器对象模型
JavaScript代码中访问和操作浏览器的各种信息的一系列特殊对象,包含了 浏览器窗口对象、地址信息对象、历史访问对象、版本信息对象、网页文档对象

  • 窗口对象:可以操作浏览器弹窗、获取/设置浏览器尺寸、获取/设置浏览器位置等等

  • 地址对象:可以操作浏览器访问url地址,实现根据地址切换不同页面

  • 历史对象:可以操作浏览器访问历史记录

  • 版本对象:可以获取浏览器和当前运行浏览器的操作系统信息

  • 文档对象:DOM对象,描述了当前浏览器打开的网页文档
    (2) 常见BOM对象
    常见BOM对象:

  • 窗口对象:window

    • alert() / confirm() / prompt() / 其他bom对象...
  • 地址对象:location || window.location

    • href:地址url信息
  • 历史对象:history

    • back()后退
    • forward()前进
    • go()访问某个记录
  • 版本信息对象:navigator

    • appName:浏览器内核名称
    • appVersion:浏览器版本信息
    • userAgent:浏览器相关信息,一般和版本信息相同
  • 文档对象:document

    • 文档对象,当前浏览器打开的网页文档
  • 屏幕对象:screen

    • 当前计算机屏幕信息
      (3) 重要属性/事件
  • window.innerHeight / window.innerWidth : 窗口尺寸

  • window.onload / window.onresize / window.onscroll :事件操作

  • location.href:访问地址

  • history.back() / forward() / go():访问历史记录

  • navigator.appName / appVersion / userAgent浏览器版本信息
    (4) 案例:吸顶菜单

<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    *{margin: 0; padding: 0; box-sizing: border-box;}
    #nav{width: 100%;height: 50px; background:orangered; color: white;font-size: 22px; text-align:center; line-height: 50px;}
  </style>
  <script>
    // 网页加载事件:代码写在body的前面,保障标签加载完成后执行代码
    window.onload = function() {
      // 获取导航条
      var _nav = document.getElementById("nav")
      // 滚动条事件
      window.onscroll = function() {
        // 获取滚动条高度
        var top = document.body.scrollTop || document.documentElement.scrollTop
        console.log(top, "滚动条")
        // 判断滚动条位置,并设置菜单样式
        if(top >= 500) {
          _nav.style.position = "fixed"
          _nav.style.left = 0
          _nav.style.top = 0
        } else {
          _nav.style.position = "relative"
        }
      }
    }
  </script>
</head>
  <body>
    <div id="nav">页面顶部菜单</div>
    <div>内容0001</div>
    <div>内容0002</div>
    <div>..</div>
  </body>
</html>

(5) 案例:回到顶部

<script>
    // 网页加载事件:代码写在body的前面,保障标签加载完成后执行代码
    window.onload = function() {
      // 获取导航条
      var _nav = document.getElementById("nav")
      // 获取回到顶部
      var _backTop = document.getElementById("back-top")
      // 滚动条事件
      window.onscroll = function() {
        // 获取滚动条高度
        var top = document.body.scrollTop || document.documentElement.scrollTop
        console.log(top, "滚动条")
        // 判断滚动条位置,并设置菜单样式
        if(top >= 500) {
          _nav.style.position = "fixed"
          _nav.style.left = 0
          _nav.style.top = 0
          // 显示回到顶部
          _backTop.style.display = "block"
        } else {
          _nav.style.position = "relative"
          _backTop.style.display = "none"
        }
      }
      _backTop.onclick = function() {
        // 设置滚动条高度0
        var timer = setInterval(function() {
          var top = document.documentElement.scrollTop
          if(top > 0) {
            document.documentElement.scrollTop -= 200
          } else {
            // 已经回到顶部,清除计时器
            clearInterval(timer)
          }
        }, 10)
      }
    }
  </script>
</head>

二、DOM
(1) 认识DOM
DOM:文档对象模型
JavaScript语法上提供的可以用于对网页文档进行标签查询、创建/修改/删除标签、操作标签属性、操作标签样式、操作标签内容的一系列函数!
(2) 查询DOM对象
网页文档对象的操作,首先通过代码查询标签对象——DOM对象
① 基础查询函数

函数 描述
document.getElementById(idVal) 根据id属性值查询单个DOM对象
document.getElementsByClassName(cVal) 根据class属性查询多个DOM对象
document.getElementsByTagName(tVal) 根据标签名称查询多个DOM对象
document.getElementsByName(nVal) 根据name属性查询多个DOM对象
document.querySelector(selector) 根据css选择器查询第一个匹配的对象
document.querySelectorAll(selector) 根据css选择器查询多个匹配的对象

② 查询其他标签

函数 描述
domObj.getElementById()/querySelecto().. 查询某个标签中包含的标签对象
domObj.parentElement 获取父标签对象
domObj.parentNode 获取父节点对象
domObj.children 获取子标签对象
domObj.childNodes 获取子节点对象(包含文本节点)
domObj.previousElementSibling 获取上一个兄弟标签节点
domObj.previousSibling 获取上一个节点(包含文本节点)
domObj.nextElementSibling 获取下一个兄弟标签节点
domObj.nextSibling 获取下一个节点(包含文本节点)
document.forms 查询网页中的所有表单

(3) 标签对象操作
DOM操作中我们已经可以查询对应的节点:需要对节点进行增加、修改和删除的操作

函数 描述
document.createElement() 创建标签节点
document.createTextElement() 创建文本节点
document.appendChild() 末尾追加一个子节点
document.insertBefore() 指定标签前面增加一个节点
document.removeElement() 删除一个指定节点
document.replaceElement() 替换/修改一个指定节点

(4) 标签属性操作

函数 描述
obj.id = val 设置id属性
obj.className = val 设置class属性
obj.setAttribute(属性名称, 变量值) 给标签对象设置属性名称="属性值"的属性
obj.getAttribute(属性名称) 获取标签对象的属性名称对应的属性值
obj.removeAttribute(属性名称) 删除标签上属性名称对应的属性

(5) 标签样式操作
行内样式:设置和获取

代码 描述
obj.style.样式名称 获取指定标签的行内样式
obj.style.样式名称 = 值 给指定标签设置/添加 行内样式

外联样式:非行内样式,一般操作过程中主要用于获取操作,代码中设置样式推荐/指定使用行内样式

代码 适用浏览器 描述
obj.currentStyle.样式名称 IE 获取样式
getComputedStyle(obj).样式名称 IE 获取样式

当前标签对象的特殊属性

属性 描述
obj.offsetHeight 高度
obj.offsetWidth 宽度
obj.offsetLeft 离窗口左侧的距离
obj.offsetTop 离窗口顶部的距

(6) 标签内容操作

代码 描述
obj.innerText 获取或者设置文本内容
obj.innerHTML 获取或者设置标签文本内容
obj.textContent 获取或者设置文本内容,等价innerText
obj.createTextNode() 创建文本节点,标准DOM操作,一般不推荐使用
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容