码迷,mamicode.com
首页 > Web开发 > 详细

Web前端之 BOM 和 DOM

时间:2019-10-16 17:44:25      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:stop   oca   chrome   提示框   error:   red   cte   宽度   索引   

前端之BOM和DOM

BOM (Browser Object Model)是指浏览器对象模型,它使JavaScript有能力与浏览器进行“对话”

DOM(Document Object Model))是指文档对象模型,通过它,可以访问HTML文档的所有元素

Window 对象是客户端 JavaScript 最高层对象之一,由于Windon对象是其它大部分对象的共同祖先,在调用 Window 对象的方法和属性时,可以省略 Window 对象的引用。例如:window.documenet.write() 可以简写成:document.write()

所有浏览器都支持 window 对象。它表示浏览器窗口

window.innerHeight    浏览器窗口的内部高度
642
window innerWidth     错误案例
VM218:1 Uncaught SyntaxError: Unexpected identifier
window.innerWidth     浏览器窗口的内部宽度
770
window.open()         打开一个新窗口
Window?{postMessage: ?, blur: ?, focus: ?, close: ?, parent: Window,?…}

window.close()    关闭当前窗口

window的子对象

navigator 对象(了解即可) 对象包含了浏览器相关信息

navigator.appName     浏览器的名字
"Netscape"   
navigator.appVersion  浏览器版本
"5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3704.400 QQBrowser/10.4.3587.400"
navigator.userAgent   浏览客户端信息,以后用在爬虫,重要
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3704.400 QQBrowser/10.4.3587.400"
navigator.platform    浏览器运行所在的操作系统
"Win32"

history 对象 对象包含了浏览器历史

history.forward()  网页前进一页
history.back()     网页后退一页

location 对象 对象用于获得当前页面的地址(URL),并把浏览器重定向到新的页面

location.href     获取当前页面地址
location.href="https://www.baidu.com"   跳转到指定页面
location.reload()  刷新当前页面   reload(刷新)

弹出框

可以在 js 中创建三种消息框:警告框,确认框,提示框

alert('你看到了吗?')   警告框
blog-common.min.js?v=4QhAuTQQoOm-lM3IPePkpoT4bSJvxH-elPKwr4VYOAI:1 alert: 你看到了吗?
true
alert(123)
blog-common.min.js?v=4QhAuTQQoOm-lM3IPePkpoT4bSJvxH-elPKwr4VYOAI:1 alert: 123
true
confirm('确认删除?')   确认框

true
confirm('确认删除?')

false
prompt('输入姓名')      提示框
"ssss"

定时器

setTimeout()

clearTimeout()

setInterval()

clearInterval()

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<script>
    function f(){
        alert('我是能弹的')
    }
    // var t = setTimeout(f,3000)  以毫秒为单位,用来及时多久后执行哪个命令
    // setTimeout(f, 3000)
    // clearTimeout(t)           清除定时器命令
    // var t = setInterval(f,2000)   反复执行计时命令
    // clearInterval(t)            清除反复执行定时命令
    function f1(){
        var t =setInterval(f,2000)
        function inner(){
            clearInterval(t)
        }
        setTimeout(inner,6000)
    }
    f1()
</script>
</head>
<body>

</body>
</html>

DOM

DOM:是一套对文档的内容进行抽象和概念化的方法

当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)

HTML DOM 模型被构造为对象的树

DOM 标准规定HTML文档中的每一成分都是一个节点(node):
文档节点(document对象):代表整个文档
元素节点(element对象):代表一个元素(标签)
文本节点(text对象):代表元素(标签)中的文本
属性节点(attribute对象):代表一个属性,元素(标签)才有属性
注释是注释节点(comment对象)

直接查找

document.getElementById('a1')        id选择器
<div class=?"a" id=?"a1">?我是第一个div?</div>?
document.getElementsByClassName('b')  类选择器
HTMLCollection?[div#b1.b, b1: div#b1.b]0: div#b1.blength: 1b1: div#b1.b__proto__: HTMLCollection
document.getElementsByClassName('b')[0]  数组索引取值
<div class=?"b" id=?"b1">?…?</div>?
document.getElementsByTagName('a')    标签选择器
HTMLCollection?[a]0: alength: 1__proto__: HTMLCollection
document.getElementsByTagName('a')[0]   数组索引取值
<a href>?a标签?</a>?

间接查找

DOM 操作HTML代码,以下各类方法基本是基于这个HTML代码基础

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div class="a" id="a1">我是第一个div</div>
<div class="b" id="b1">我是第二个div
    <span class="c" id="c1">我是第二个div的span</span>
    <div class="d" id="d1">我是第二个div的div
    <a href="">a标签</a>
    </div>
</div>
<div class="e" id="e1">我是第三个div</div>
<input type="text" value="123">
</body>
</html>
var dEle=document.getElementById('c1')
undefined
dEle
<span class=?"c" id=?"c1">?我是第二个div的span?</span>?
dEle.parentElement       注:查找父级dom
<div class=?"b" id=?"b1">?"我是第二个div
    "<span class=?"c" id=?"c1">?我是第二个div的span?</span>?<div class=?"d" id=?"d1">?…?</div>?</div>?
var paEle=dEle.parentElement
undefined
paEle
<div class=?"b" id=?"b1">?…?</div>?
paEle.children        注:查找儿子dom不包括孙子
HTMLCollection(2)?[span#c1.c, div#d1.d, c1: span#c1.c, d1: div#d1.d]0: span#c1.c1: div#d1.dlength: 2c1: span#c1.cd1: div#d1.d__proto__: HTMLCollection
paEle.firstChild    注:查找第一个儿子标签内容
"我是第二个div
    "
paEle.firstElementChild   注:查找第一个儿子dom
<span class=?"c" id=?"c1">?我是第二个div的span?</span>?
paEle.lastElementChild    注:查找最后一个儿子
<div class=?"d" id=?"d1">?…?</div>?
paEle.lastChild
#text
var cEle=dEle.nextElementSibling    注:查找当前标签的下一个兄弟
undefined
cEle
<div class=?"d" id=?"d1">?…?</div>?
cEle.previousSibling
#text
cEle.previousElementSibling     注:查找当前元素的上一个兄弟
<span class=?"c" id=?"c1">?我是第二个div的span?</span>?

添加创建节点

var img=document.createElement('img')      创建标签
undefined
img
<img>?
img.src='1.jpg'        设置标签的默认属性
"1.jpg"
img
<img src=?"1.jpg">?
var d1Ele=document.getElementById('a1')      获得标签对象
undefined
d1Ele.appendChild(img)     插入标签
<img src=?"1.jpg">?

时间显示器

onclick 当用户点击某个对象时调用的事件句柄

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<input type="text" id="a1">
<input type="button" value="开始" id="start">
<input type="button" value="暂停" id="stop">
<script>
    var t;
    var a1Ele=document.getElementById('a1');
    var stopEle=document.getElementById('stop');
    var startEle=document.getElementById('start')
    function showtime(){
        var date_obj=new Date();
        var now_time=date_obj.toLocaleString();
        a1Ele.value=now_time;
    }
    startEle.onclick=function(){
        if(!t){
            t=setInterval(showtime,1000)
        }
    }
    stopEle.onclick=function(){
        clearInterval(t)
        t=''
    }

</script>
</body>
</html>

搜索框

onfocus 元素获得焦点。 // 练习:输入框

onblur 元素失去焦点。 应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<input type="text" id="a1" value="请输入" onfocus="foo()" onblur="fool()">
    <script>
        var a1Ele=document.getElementById('a1')
        function foo(){
            var val=a1Ele.value
            if(val=='请输入'){
                a1Ele.value=''
            }
        }
        function fool(){
            var val=a1Ele.value
            if(val==''){
                a1Ele.value='请输入'
            }
        }
    </script>
</body>
</html>
var d1Ele=document.getElementById('b1')      获取标签对象
undefined
d1Ele
<div class=?"b" id=?"b1">?"我是第二个div
    "<span class=?"c" id=?"c1">?我是第二个div的span?</span>?<div class=?"d" id=?"d1">?…?</div>?</div>?
var imgEle=document.createElement('img')    创建标签
undefined
imgEle
<img>?
imgEle.src='1.jpg'    设置标签的默认属性
"1.jpg"

imgEle
<img src=?"1.jpg">?
var d1Ele=document.getElementById('a1')
undefined
d1Ele.appendChild(imgEle)    插入子标签
<img src=?"1.jpg">?
var d1Ele=document.getElementById('b1')
undefined

d1Ele.appendChild(imgEle)
<img src=?"1.jpg">?
var c1Ele=document.getElementById('c1')
undefined
d1Ele.insertBefore(imgEle,c1Ele)    插入指定位置的标签
<img src=?"1.jpg">?

imgEle.setAttribute("name","val")    设置标签属性
undefined
imgEle
<img src=?"1.jpg" name=?"val">?
d1Ele
<div class=?"b" id=?"b1">?"我是第二个div
    "<img src=?"1.jpg" name=?"val">?<span class=?"c" id=?"c1">?我是第二个div的span?</span>?<div class=?"d" id=?"d1">?…?</div>?</div>?
d1Ele.removeChild(imgEle)        移除子标签
<img src=?"1.jpg" name=?"val">?
d1Ele.replaceChild(imgEle,c1Ele)  替换标签,第一个参数是新标签,第二个参数是要被替换的标签
<span class=?"c" id=?"c1">?我是第二个div的span?</span>?
d1Ele
<div class=?"b" id=?"b1">?"我是第二个div
    "<img src=?"1.jpg" name=?"val">?<div class=?"d" id=?"d1">?…?</div>?</div>?
var a1Ele=document.getElementById('a1')     获取标签对象
undefined
a1Ele
<div class=?"a" id=?"a1">?我是第一个div?</div>?
a1Ele.innerText     获取标签文本内容
"我是第一个div"
a1Ele.innerText='修改标签内容'    设置修改文本内容
"修改标签内容"
a1Ele.innerHTML    如下解释
"修改标签内容"
var b1Ele=document.getElementById('b1')
undefined
b1Ele
<div class=?"b" id=?"b1">?"我是第二个div
    "<span class=?"c" id=?"c1">?我是第二个div的span?</span>?<div class=?"d" id=?"d1">?…?</div>?</div>?
b1Ele.innerText                获取标签文本内容
"我是第二个div 我是第二个div的span
我是第二个div的div a标签"
b1Ele.innerHTML      获取当前标签底下的所有内容,
"我是第二个div
    <span class="c" id="c1">我是第二个div的span</span>
    <div class="d" id="d1">我是第二个div的div
    <a href="">a标签</a>
    </div>
"
a1Ele.innerText='<h1>111</h1>'     相当于对标签赋值,修改内容
"<h1>111</h1>"
a1Ele.innerHTML='<h1>111</h1>'     设置标签内容,并执行样式
"<h1>111</h1>"

注:innerText 只对 文本内容 进行操作处理,  innerHTML,不仅可操作文本内容,还操作当前标签下所有的 HTML 代码
var b1Ele=document.getElementById('b1')
undefined
b1Ele
<div class=?"b b12 b13" id=?"b1">?…?</div>?
b1Ele.classList      获取所有的 class 属性值
DOMTokenList(3)?["b", "b12", "b13", value: "b b12 b13"]
b1Ele.classList.remove('b12')   移除属性值
undefined
b1Ele
<div class=?"b b13" id=?"b1">?…?</div>?
b1Ele.classList.add('b14')      添加属性值
undefined
b1Ele
<div class=?"b b13 b14" id=?"b1">?…?</div>?
b1Ele.classList.contains('b')   判断值是否存在
true
b1Ele.classList.toggle('b')     toggle(),表示如果存在传的这个值,就删除,不存在就添加
false                           这里存在就给删除了
b1Ele
<div class=?"b13 b14" id=?"b1">?…?</div>?
b1Ele.classList.toggle('b')     这里不存在就添加上
true
b1Ele
<div class=?"b13 b14 b" id=?"b1">?…?</div>?

b1Ele.style.backgroundColor="red"   设置CSS样式属性
"red"
var a1Ele=document.getElementById('a1')
undefined
a1Ele.style.backgroundColor='green'
"green"

使用 JQ

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!--写 JQ 代码一定要引入 jquery.js 文件-->
    <script src="jquery.js"></script>
</head>
<body>

</body>
</html>

toggle

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #a1{
            height: 400px;
            width: 400px;
        }
        .red{
            background: red;
        }
        .green{
            background: green
        }
    </style>
</head>
<body>
<div id="a1" class="red green"></div>
</body>
</html>

Web前端之 BOM 和 DOM

标签:stop   oca   chrome   提示框   error:   red   cte   宽度   索引   

原文地址:https://www.cnblogs.com/chmily/p/11686864.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!