Bom

[TOC]

一、BOM

1. BOM 介绍

BOM全称为“Browser Object Model”,浏览器对象模型。提供一系列操作浏览器的属性和方法。核心对象为window对象,不需要手动创建,跟随网页运行自动产生,直接使用,在使用时可以省略书写。

2. window对象常用方法

1)网页弹框

alert()     //警告框,一个参数,无返回值
prompt()    //带输入框的弹框,可接收两个参数("提示信息",输入框中的默认值)
confirm()   //确认框,返回布尔值

全局变量和全局函数都是window对象的属性和方法:

    var a =100;
    function a1(){
        console.log("a1被调用");
    }
    console.log(a,window.a);//100,100
    console.log(window)//window对象
    a1();//a1被调用
    window.a1()//a1被调用

2)窗口的打开和关闭

window.open("URL")  //新建窗口访问指定的URL
window.close()      //关闭当前窗口(关闭自身)

练习:给出确认框,点确定时打开目标文件,点击取消关闭当前网页.

    r1=confirm("请确认")
    if(r1){
        window.open("http://www.baidu.com")
    }else{
        window.close()
    }

3)定时器方法

  1. 间歇调用(周期性定时器)
    作用:每隔一段时间就执行一次代码
    开启定时器:
var timerID = setInterval(function,interval);
/*
参数 :
 function : 需要执行的代码,可以传入函数名;或匿名函数
 interval : 时间间隔,默认以毫秒为单位 1s = 1000ms
返回值 : 返回定时器的ID,用于关闭定时器
*/

关闭定时器 :

//关闭指定id对应的定时器
clearInterval(timerID);

示例1:

<body>
    <button id="start">开启</button>
    <button id="stop1">关闭</button>
<script>
    start.onclick=function (){
        //开启定时器
        timer = setInterval(function (){
            //打印日期时间
            var date = new Date();
            console.log(date);
        },1000);//非阻塞
        console.log("--------------")
    };
    stop1.onclick = function (){
        //关闭间歇调用
        clearInterval(timer)
    }
    //运行结果:
--------------
01_window.html:36 Tue Jul 02 2019 11:04:17 GMT+0800 (中国标准时间)
01_window.html:36 Tue Jul 02 2019 11:04:18 GMT+0800 (中国标准时间)
</script>
</body>

示例2:页面显示5秒倒计时

<body>
    <h1 style="text-align: center;" id="show"></h1>
    <script>
    var i = 5;
    show.innerHTML = i;
    var timerID=setInterval(function (){
        i--;
        if(i!=0){
            show.innerHTML = i;
        }else{
            show.innerHTML='倒计时结束!';
            //停止定时器
            clearInterval(timerID)
        }
    },1000);
    </script>
</body>
  1. 超时调用(一次性定时器)
    作用:等待多久之后执行一次代码
//开启超时调用:
var timerId = setTimeout(function,timeout);
//关闭超时调用:
clearTimeout(timerId);

示例:

<body>
    <button id="start">开启</button>
    <button id="stop1">关闭</button>
    <script>
        start.onclick = function (){
            //开始超时调用
            timer = setTimeout(function (){
                console.log("超时调用")
            }, 10000);
        };
        stop1.onclick=function (){
            //关闭超时调用
            clearTimeout(timer);
        }
    </script>
</body>

window 对象常用属性

window的大部分属性又是对象类型

1)history

作用:保存当前窗口所访问过的URL
属性 :
length 表示当前窗口访问过的URL数量
方法 :

back() 对应浏览器窗口的后退按钮,访问前一个记录
forward() 对应前进按钮,访问记录中的下一个URL
go(n) 参数为number值,翻阅几条历史记录,正值表示前进,负值表示后退

示例:

<button onclick="history.back()">返回</button>
<button onclick="history.forward()">前进</button>
<button onclick="history.go(1)">go(1)</button>
<button onclick="history.go(-1)">go(-1)</button>

历史记录的长度变化:

  • 通过超链接在当前窗口访问其他URL,会造成历史记录增加;
  • 前进和后退不会造成历史记录的变化,只是指针的移动;
  • 历史记录的进出栈管理:
    例如:A->B->C
    从页面C后退至页面A,在A中通过超链接跳转至页面C
    A->C

2)location

作用:保存当前窗口的地址栏信息(URL)
属性 :
href 设置或读取当前窗口的地址栏信息
方法 :
reload(param) 重载页面(刷新)
参数为布尔值,默认为false,表示从缓存中加载,设置为true,强制从服务器根目录加载
示例:

<button onclick="console.log(location.href);">获取href</button>
<button onclick="location.href='http://www.baidu.com';">设置href</button>
<button onclick="location.reload()">刷新</button>

3)document

提供操作文档HTML 文档的方法,,参见DOM

二、DOM节点操作

DOM全称为“Document Object Model”,文档对象模型,提供操作HTML文档的方法。(注:每个html文件在浏览器中都视为一篇文档,操作文档实际就是操作页面元素。)

1)节点对象

JS 会对html文档中的元素,属性,文本内容甚至注释进行封装,称为节点对象,提供相关的属性和方法。

2)常用节点分类

  • 元素节点 ( 操作标签)
  • 属性节点(操作标签属性)
  • 文本节点(操作标签的文本内容)

3)获取元素节点

  1. 根据标签名获取元素节点列表
var elems = document.getElementsByTagName("");
例如:var list1 = document.getElementsByTagName("h1");
console.log(list1);
console.log(list1[0],list1[0].innerHTML);
//<h1>Fine,Thank you,and you</h1>  "Fine,Thank you,and you"
/*
参数 : 标签名
返回值 : 节点列表,需要从节点列表中获取具体的元素节点对象
*/
  1. 根据class属性值获取元素节点列表
var elems = document.getElementsByClassName("");
/*
参数 : 类名(class属性值)
返回值 : 节点列表
*/
  1. 根据id属性值取元素节点
var elem = document.getElementById("");
/*
参数 : id属性值
返回值 : 元素节点
*/
  1. 根据name属性值取元素列表
var elems = document.getElementsByName("");
/*
参数 : name属性值
返回 : 节点列表
*/

注意:获取元素操作只能等待标签解析完毕后执行.

4)操作元素内容

元素节点对象提供了以下属性来操作元素内容

innerHTML : 读取或设置元素文本内容,可识别标签语法
innerText : 设置元素文本内容,不能识别标签语法
value : 读取或设置表单控件的值

示例:(取元素中的值,并呈现)

    <input type="text" name="username"><button id="btn">提交</button>
    <div id="show"></div>
<script>
  var list3 = document.getElementsByName("username");

btn.onclick = function (){
    //获取表单控件的值
    console.log(list3[0].value);
    show.innerHTML="<h1>"+list3[0].value+"</h1>"
}
</script>

5)操作元素属性

  1. 通过元素节点对象的方法操作标签属性
elem.getAttribute("attrname");//根据指定的属性名返回对应属性值
elem.setAttribute("attrname","value");//为元素添加属性,参数为属性名和属性值
elem.removeAttribute("attrname");//移除指定属性
  1. 标签属性都是元素节点对象的属性,可以使用点语法访问,例如:
h1.id = "d1";        //set 方法
console.log(h1.id);  //get 方法
h1.id = null;       //remove 方法

注意 :

  • 属性值以字符串表示
  • class属性需要更名为className,避免与关键字冲突,例如:
    h1.className = "c1 c2 c3";

6)操作元素样式

  1. 为元素添加id,class属性,对应选择器样式
  2. 操作元素的行内样式,访问元素节点的style属性,获取样式对象;样式对象中包含CSS属性,使用点语法操作。
p.style.color = "white";
p.style.width = "300px";
p.style.fontSize = "20px";

注意 :

  • 属性值以字符串形式给出,单位不能省略
  • 如果css属性名包含连接符,使用JS访问时,一律去掉连接符,改为驼峰. font-size -> fontSize

7)元素节点的层次属性

  1. parentNode
    获取父节点
  2. childNodes
    获取子节点数组,只获取直接子节点(包含文本节点和元素节点)
  3. children
    获取子节点数组,只获取直接子元素,不包含间接元素和文本节点
  4. previousSibling
    获取前一个兄弟节点(文本节点也可以是兄弟节点)
    previousElementSibling 获取前一个元素兄弟节点
  5. nextSibling
    获取后一个兄弟节点
    nextElementSibling 获取下一个元素兄弟节点
  6. attributes
    获取属性节点的数组

8)节点的创建,添加和删除

  1. 创建元素节点
var elem = document.createElement("标签名");//返回创建好的元素节点
  1. 节点的添加
    添加和移除操作都必须由父元素执行,方法如下:
  • 在父元素的末尾添加子节点
parendNode.appendChild(node);
  • 指定位置添加
parendNode.insertBefore(newNode,oldNode);//在oldNode之前添加子节点
  1. 移除节点
parentNode.removeChild(node);//移除指定节点对象

三、DOM 事件处理

事件:指用户的行为或元素的状态。由指定元素监听相关的事件,并且绑定事件处理函数。
事件处理函数:元素监听事件,并在事件发生时自动执行的操作。

1) 事件函数分类

  1. 鼠标事件
onclick     //单击
ondblclick  //双击
onmouseover //鼠标移入
onmouseout  //鼠标移出
onmousemove //鼠标移动
  1. 键盘事件
onkeydown   //键盘按键被按下
onkeyup     //键盘按键被抬起
onkeypress  //字符按键被按下
  1. 文档或元素加载完毕
onload      //元素或文档加载完毕
  1. 表单控件状态监听
onfocus     //文本框获取焦点
onblur      //文本框失去焦点
oninput     //实时监听输入
onchange    //两次输入内容发生变化时触发,或元素状态改变时触发
onsubmit    //form元素监听,点击提交按钮后触发,通过返回值控制数据是否可以发送给服务器

2)事件绑定方式

  1. 内联方式
    将事件名称作为标签属性绑定到元素上
    例 :
<button onclick="alert()">点击</button>
  1. 动态绑定
    获取元素节点,动态添加事件
    例 :
btn.onclick = function (){

};

3)事件函数使用

  1. onload
    常用于等待文档加载完毕再进行下一步操作
  2. 鼠标事件
  3. 表单事件
    onchange: 监听输入框前后内容是否发生变化;也可以监听按钮的选中状态
    onsubmit :表单元素负责监听,允许返回布尔值,表示数据是否可以发送;返回true,允许发送;返回false,不允许提交
  4. 键盘事件
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容