BOM和DOM

BOM

js的组成部分:

1.ECMAScript,是js的核心语法,目前最新的标准是ES6(ECMAScript2015之后的版本)

 2.BOM,是浏览器对象模型,提供了操作浏览器的api

 3.DOM,是文档对象模型,提供了操作当前网页的api

 BOM 是浏览器对象模型,就可以理解成是当前浏览器打开的窗口

window对象 就是 BOM

 通过window对象 可以操作浏览器本身 它里面提供了一些操作当前浏览器的对象和方法

弹框方法

window.alert('消息框')

window.prompt('输入框')

window.confirm('确认框')*/

强制转换类型的方法

console.log(window.parseInt('123')); //强转为整数

console.log(window.parseFloat('123.123')); //强转为浮点数

console.log(window.isNaN('123')); //判断是不是不是数字

 console.log(window.isNaN('123s'));

定时器方法

指定的毫秒后,执行的定时器,只执行一次

 window.setTimeout(function(){

     console.log('好好学习,天天向上');

 },3000)

每隔指定的毫秒后,执行的定时器

        window.setInterval(function(){

            console.log('HelloWorld');

        },2000)

示例1:setTimeout(()=>{

            // open()方法打开新的窗口

             window.open('http://baidu.com')

        },5000)


       示例2: setTimeout(()=>{

            // close()方法,用于关闭当前窗口

           window.close()

        },10000)


window对象的location属性,提供了操作浏览器地址栏的属性和方法

console.log(window.location);

示例:setTimeout(()=>{

            // 跳转到新的地址栏

             window.location.href = 'http://baidu.com'

            // 刷新当前窗口

           window.location.reload()

        },5000)


window对象的history属性,提供了操作浏览器历史记录的属性和方法

console.log(window.history);

示例:window.history.back() //回退到上一个历史记录

        window.history.forward() //前进到下一个历史记录

        window.history.go()  //既可以后退也可以前进


练习:获取btn按钮对象

let btn = document.getElementById('btn')

        btn.onclick = function(){

             window.history.forward()  //前进到下一个历史记录

            window.history.go(1) //前进一次

            window.history.go(3) //前进三次

           window.history.go(-1) //后退一次

            window.history.go(-3) //后退三次

        }


DOM

window对象的document属性,提供了操作当前网页的属性和方法

浏览器最主要的作用是浏览网页,document对象用于操作当前浏览的网页

DOM 文档对象模型,就是当前网页里面的所有内容。

BOM 就是 window对象 DOM 就是 document对象

因为网页是在浏览器中显示的,整个浏览器是BOM,所以DOM其实是BOM的一部分

console.log(window.document);


示例:<div id="a">Hello1</div>

    <div class="b">Hello2</div>

    <div id="a">Hello3</div>

    <p name="china">周杰伦</p>

    <p name="japan">张三</p>

    <p name="china">林俊杰</p>

    <p name="japan">李四</p>

    <ul>

        <li>电视机</li>

        <li class="b">洗衣机</li>

        <li>电冰箱</li>

    </ul>

(用下面几种方法对该文档进行操作,操作后结果放置在文档里面了)

getElementsByTagName()方法

通过标签的名称获取标签对象,返回的是一个类似数组的集合

let divs = document.getElementsByTagName("div")

        console.log(divs);

 通过下标获取指定的元素

        console.log(divs[0]);


getElementById()方法

根据元素的id属性值来获取指定的元素。

注意:如果网页中id属性值重复,只获取第一个

let div1 = document.getElementById('a')

        div1.innerText = '你好'


getElementsByName()方法

根据元素的name属性值获取所有该元素。

let chinas = document.getElementsByName('china')

        for(let i=0;i<chinas.length;i++){

            chinas[i].style.backgroundColor = 'pink'

        }


getElementsByClassName()方法

根据元素的class类选择器名称获取所有该元素。

let bs = document.getElementsByClassName('b')

        for(let i=0;i<bs.length;i++){

            bs[i].style.color = 'red'

        }

运行后的结果:


querySelectorAll()方法

根据选择器的名称返回所有的元素。

let divs = document.querySelectorAll('div')

        console.log(divs);


注意:querySelectorAll()方法

返回的是集合对象,不是数组对象。可以利用展开运算符,将集合对象转为数组对象。

转为数组对象后,就可以使用数组相关的方法了。

let divs2 = [...divs]

        console.log(divs2);


querySelector()方法

根据选择器的名称返回元素,如果有多个元素,只返回第一个元素。

let div = document.querySelector('div')

        console.log(div);


练习:

根据id选择器获取标签元素

et a = document.querySelectorAll("#a")

        console.log(a);

根据交集选择器获取标签元素

let b = document.querySelectorAll('li.b')

        console.log(b);

根据后代选择器获取标签元素

        let div_p = document.querySelectorAll("div p")

        console.log(div_p);

根据属性选择器获取网页元素

        let abc = document.querySelectorAll('div[abc]')

        console.log(abc);

根据并集选择器获取网页元素

        let all = document.querySelectorAll('div,p')

        console.log(all);

总之:之前在css中,如何定义选择器,这里就可以根据该选择器获取对应的标签元素

示例:

HTML内容:

<div id="a" name="张三" age="20"></div>

    <a id="b" href="http://baidu.com" target="_blank" title="百度一下,你就知道" abc='哈哈'>百度</a>

    <div id="c">好好学习,天天向上</div>

    <button id="size">添加大小</button>

    <button id="color">添加颜色</button>

    <button id="radius">添加边框</button>

    <button id="bgcolor">添加背景</button>

    <br>

    <button id="size1">删除大小</button>

    <button id="color1">删除颜色</button>

    <button id="radius1">删除边框</button>

    <button id="bgcolor1">删除背景</button>

CSS样式:

<style>

        #c{

            border: 1px solid #ccc;

            padding: 10px;

        }

        .size{

            font-size: 30px;

        }

        .color{

            color: green;

        }

        .radius{

            border-radius: 10px;

        }

        .bgcolor{

            background-color: pink;

        }

    </style>

js-DOM代码:

        // 获取#a元素

        let a = document.querySelector('#a')

        // innerText属性,用于获取 和 操作 DOM的文本内容。

        // a.innerText = '好好学习,天天向上'

        // a.innerText = '好好学习<button>天天向上</button>'

        // innerHTML属性,用于获取 和 操作 DOM的HTML内容。

        a.innerHTML = '好好学习<button>天天向上</button>'

        console.log(a.innerHTML);

        console.log(a.innerText);

        // setAttribute()方法,设置元素的属性值,需要传两个参数(属性名和属性值)

        // 没有该属性可以添加新的属性

        a.setAttribute('name','李四')

        a.setAttribute('age','30')

        a.setAttribute('gender','男')


        // getAttribute()方法,获取元素的属性值,只需要传一个参数(属性名)

        let name = a.getAttribute('name')

        let age = a.getAttribute('age')

        console.log(name,age);

        console.log('--------------------------');

        // 如果获取的是网页的必备元素,并且该元素有且只有一个,可以使用下面的方法

        document.title = '我是网页的标题'

        // document.body.style.backgroundColor = 'pink'

        console.log('--------------------------');

        // 注意:如果设置的是元素的自身属性,可以直接设置

        let b = document.querySelector('#b')

        b.href = "http://taobao.com"

        b.target = "_self"

        b.title = "淘呀淘"

        // 由于abc是自定义属性,所以只能通过setAttrib()方法设置

        b.setAttribute('abc','呵呵')

        console.log(b);


        let c = document.querySelector('#c')

        // 添加样式

        document.querySelector("#size").onclick = function(){

            c.classList.add('size')

        }

        document.querySelector("#color").onclick = function(){

            c.classList.add('color')

        }

        document.querySelector("#radius").onclick = function(){

            c.classList.add('radius')

        }

        document.querySelector("#bgcolor").onclick = function(){

            c.classList.add('bgcolor')

        }

        // 删除样式

        document.querySelector("#size1").onclick = function(){

            c.classList.remove('size')

        }

        document.querySelector("#color1").onclick = function(){

            c.classList.remove('color')

        }

        document.querySelector("#radius1").onclick = function(){

            c.classList.remove('radius')

        }

        document.querySelector("#bgcolor1").onclick = function(){

            c.classList.remove('bgcolor')

        }

运行结果:

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

推荐阅读更多精彩内容

  • BOM是浏览器对象模型,DOM是文档对象模型;前者是对浏览器本身进行操作,而后者是对浏览器(可看成容器)内的内容进...
    learninginto阅读 291评论 0 9
  • 一、BOM BOM(Browser Object Model): 浏览器对象模型 其实就是操作浏览器的一些能力 我...
    爱吃胡萝卜阅读 230评论 1 1
  • BOM&&DOM BOM的概念 提供了独立于页面内容而与浏览器进行交互的对象,其核心对象是window 在浏览器中...
    一二三四五_6ce3阅读 141评论 0 0
  • BOM / DOM(上) 今天开始我们开始使用 js 去操作浏览器和页面中的 html 元素了 BOM BOM(B...
    蜗牛的愿望正在缓冲中阅读 257评论 0 0
  • js的组成部分 前面学习的部分是ECMAScript部分,都是基础语法部分。基础语法只是规定的代码如何写,并不能实...
    新生勿扰阅读 285评论 0 0