browser object model
document onject model
BOM对象
window对象
所有浏览器都支持 window 对象。
概念上讲.一个html文档对应一个window对象.
功能上讲: 控制浏览器窗口的.
使用上讲: window对象不需要创建对象,直接使用即可.
Window 对象方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| alert(result); */ 方法讲解: open('','','width=200,resizable=no,height=100');
|
setInterval,clearInterval
setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。
秒表练习
1 2
| 语法:<br> setInterval(code,millisec) 其中,code为要调用的函数或要执行的代码串。millisec周期性执行或调用 code 之间的时间间隔,以毫秒计。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| <!--onfocus 获取光标事件 绑定了一个事件--> <input type="text" id="timer" onfocus="start()"> <button onclick="stop()">stop</button> <script> //js 是事件驱动编程 由用户的行为触发 function bar() { var current_time =new Date(); var s_time=current_time.toLocaleString(); var ele = document.getElementById("timer");//找到id=timer的标签 //现在ele是一个对象了,有标签input的属性 ele.value = s_time;//input是通过value显示内容的额 } var ID; function start() { if(ID == undefined){ bar(); ID = setInterval(bar,1000); /*注意这里的bar是函数名,不能加括号 是通过ID获得函数的运行的*/ } } function stop(){ clearInterval(ID); ID = undefined;/*清除ID 的之后就是undefined*/ } </script>
|
DOM 对象
- HTML Document Object Model(文档对象模型)
- HTML DOM 定义了访问和操作HTML文档的标准方法
- HTML DOM 把 HTML 文档呈现为带有元素、属性和文本的树结构(节点树)

DOM节点
节点类型
- 整个文档是一个文档节点
- 每个 HTML 标签是一个元素节点
- 包含在 HTML 元素中的文本是文本节点
- 每一个 HTML 属性是一个属性节点

节点关系
节点树中的节点彼此拥有层级关系。
父(parent),子(child)和同胞(sibling)等术语用于描述这些关系。父节点拥有子节点。同级的子节点被称为同胞(兄弟或姐妹)。
- 在节点树中,顶端节点被称为根(root)
- 每个节点都有父节点、除了根(它没有父节点)
- 一个节点可拥有任意数量的子
- 同胞是拥有相同父节点的节点

节点查找
document是全局查找,是直接查找。
涉及到寻找元素,注意script标签的位置!
1 2 3 4
| document.getElementById(“idname”) document.getElementsByTagName(“tagname”) document.getElementsByName(“name”) document.getElementsByClassName(“name”)
|
应用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| <div id="div1"> <div class="div2">i am div2</div> <div name="yuan">i am div2</div> <div id="div3">i am div2</div> <p>hello p</p> </div> <script> var div1=document.getElementById("div1"); ////支持; // var ele= div1.getElementsByTagName("p"); // alert(ele.length); ////支持 // var ele2=div1.getElementsByClassName("div2"); // alert(ele2.length); ////不支持 // var ele3=div1.getElementById("div3"); // alert(ele3.length); ////不支持 // var ele4=div1.getElementsByName("yuan"); // alert(ele4.length) </script>
|
先找到了父亲,通过父亲可以找tagname ,classname ,但是直接找name,id是找不到的
所以用到了下面的导航查找
导航查找
- parentElement // 父节点标签元素
- children // 所有子标签
- firstElementChild // 第一个子标签元素
- lastElementChild // 最后一个子标签元素
- nextElementtSibling // 下一个兄弟标签元素
- previousElementSibling // 上一个兄弟标签元素
注意,js中没有办法找到所有的兄弟标签!
节点操作
节点的增删改查
把增加的节点放到某个节点的前边
somenode.insertBefore(newnode,某个节点);
removeChild():获得要删除的元素,通过父元素调用删除
节点属性操作
获取文本节点的值:innerText innerHTML
attribute操作
- elementNode.setAttribute(name,value) ;
- elementNode.getAttribute(属性名)
- elementNode.removeAttribute(“属性名”);
value获取当前选中的value值
1.input
2.select (selectedIndex)
3.textarea
innerHTML 给节点添加html代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| tag.innerHTML = “<p>要显示内容</p>”; ``` **关于class的操作** - elementNode.className - elementNode.classList.add - elementNode.classList.remove **改变css样式:** ```js <p id="p2">Hello world!</p> document.getElementById("p2").style.color="blue"; .style.fontSize=48px
|
style在这里用的时候不同于css中的有-,这里没有了
DOM Event(事件)
事件类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| onclick 当用户点击某个对象时调用的事件句柄。 ondblclick 当用户双击某个对象时调用的事件句柄。 onfocus 元素获得焦点。 练习:输入框 onblur 元素失去焦点。 应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证. onchange 域的内容被改变。 应用场景:通常用于表单元素,当元素内容被改变时触发.(三级联动) onkeydown 某个键盘按键被按下。 应用场景: 当用户在最后一个输入框按下回车按键时,表单提交. onkeypress 某个键盘按键被按下并松开。 onkeyup 某个键盘按键被松开。 onload 一张页面或一幅图像完成加载。 onmousedown 鼠标按钮被按下。 onmousemove 鼠标被移动。 onmouseout 鼠标从某元素移开。 onmouseover 鼠标移到某元素之上。 onmouseleave 鼠标从元素离开 onselect 文本被选中。 onsubmit 确认按钮被点击。
|
绑定事件方式
绑定方式1
1 2 3 4 5 6 7 8
| <div id="div" onclick="foo(this)">点我呀</div> <script> function foo(self){ // 形参不能是this; console.log("点你大爷!"); console.log(self); } </script>
|
绑定方式2
1 2 3 4 5 6 7 8 9
| var ele= document.getElementsByTagName("p")[0]; ele.onclick = function () { console.log(this); alert(this.innerText); };
|
3绑定多个对象
1 2 3 4 5 6 7
| 多个对象 var eles= document.getElementsByTagName("p"); for (var i=0;i<eles.length;i++){ eles[i].onclick=function () { alert(34) } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <input type="text" onfocus="enter(this)" value="请输入内容" onblur="exit(this)"> <script> function enter(self) { if (self.value=="请输入内容") { self.value = ""; } } function exit(self) { if (self.value.trim() == ""){ self.value = "请输入内容" } } </script>
|
事件介绍
1、onload:如果想把script中js文件写到HTML的前面的部分,就能先加载这一部分非内容。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script> window.onload=function(){ var ele=document.getElementById("ppp"); ele.onclick=function(){ alert(123) }; }; */ function fun() { var ele=document.getElementById("ppp"); ele.onclick=function(){ alert(123) }; } </script> </head> <body onload="fun()"> <p id="ppp">hello p</p> </body> </html>
|
2、onsubmit
有的内容可以只在前端就进行判断,如密码的格式,电话号码的格式等,输入错误,重新输入。这样就不用后端进行判断。
当表单在提交时触发. 该属性也只能给form元素使用.应用场景: 在表单提交前验证用户输入是否正确.如果验证失败.在该方法中我们应该阻止表单的提交.
最后一定是form表单提交的
提交后,输入框内的内容会清空,这是如果输入错入,想要阻止向服务端提交,用到了return false 和e
1 2 3 4 5 6 7 8 9 10
| <form action="" id="form"> 用户名:<p><input type="text" name="user"></p> 密码:<p><input type="text" name="pwd"></p> <p><input type="submit" value="sub1"></p> </form> 这种没有method的方式会通过get的方式发送文件 会在地址栏中出现内容 这种情况是下回通过地址栏进行发送内容 file:///D:xxx/onsubmit.html?user=sdfs&pwd=sdfsd
|
为了避免上面的情况:method=”post”
1 2 3 4 5 6
| <form action="" method="post" id="form"> 用户名:<p><input type="text" name="user"></p> 密码:<p><input type="text" name="pwd"></p> <p><input type="submit" value="sub1"></p> </form>
|
只要向服务端进行了提交,输入框的内容就会清空:
为了避免一些输入格式的错误,一些内容会在起前端就进行判断,如果错误,就阻止提交。用到了两种方法:
- return false
- e.preventDefault(); 用到了event对象
1 2 3 4 5 6 7 8
| <script> var ele = document.getElementById("form"); ele.onsubmit = function (e) { alert(123); return false; } </script>
|
3、Event 对象:
Event 对象代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。
事件通常与函数结合使用,函数不会在事件发生前被执行!event对象在事件发生时系统已经创建好了,并且会在事件函数被调用时传给事件函数.我们获得仅仅需要接收一下即可.
比如onkeydown,我们想知道哪个键被按下了,需要问下event对象的属性,这里就时KeyCode
4、事件传播:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> .div1{ width: 100px; height: 100px; background-color: red; } .div2{ width: 50px; height: 50px; background-color: green; } </style> </head> <body> <div class="div1"> <div class="div2"> </div> </div> <script> var ele=document.getElementsByClassName("div1")[0]; ele.onclick = function(){ alert(111); } </script> </body> </html>
|
这种情况的结果是,在div1 和div2的部分点击的时候,都会显示alert(111) 中的内容,这种特点就叫做实践传播
1 2 3 4 5 6 7 8 9 10 11
| <script> var ele=document.getElementsByClassName("div1")[0]; ele.onclick = function(){ alert(111); } var ele2 = document.getElementsByClassName("div2")[0]; ele2.onclick = function(){ alert(222); } </script>
|
这种情况下,点击div2的时候。会先显示111 然后显示222
阻止内部事件向外部传播
e.stopPropagation();
1 2 3 4 5 6 7 8 9 10 11 12
| <script> var ele=document.getElementsByClassName("div1")[0]; ele.onclick = function(){ alert(111); } var ele2 = document.getElementsByClassName("div2")[0]; ele2.onclick = function(e){ alert(222); e.stopPropagation(); } </script>
|
4、onselect:
onselect是选择文字内容的时候触发的事件
5、onchange:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <select name="" id=""> <option value="">111</option> <option value="">222</option> <option value="">333</option> </select> <script> var ele=document.getElementsByTagName("select")[0]; ele.onchange=function(){ alert(123); } </script>
|
标签的二级联动
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <select name="" id="" class="select"> <option value="1">河南省</option> <option value="2">湖南省</option> <option value="3">云南省</option> </select> <select class="cities" name="" id=""></select> <script> var info = {"河南省":["郑州","洛阳"],"湖南省":["湘潭","长沙","岳阳"],"云南省":["大理","昆明"]}; var ele = document.getElementsByClassName("select")[0]; var ele_cites = document.getElementsByClassName("cities")[0]; ele.onchange = function(){ var arrs = ele.children; var sindex = this.selectedIndex; var province = arrs[sindex].innerText; var cities_arry = info[province]; var ele_children = ele_cites.children; for (var j=0;j<ele_cites.children.length;j++ ) { ele_cites.removeChild(ele_cites.children[j]); j--; } for (var i = 0; i < cities_arry.length; i++) { var option =document.createElement("option"); option.innerText = cities_arry[i]; ele_cites.appendChild(option); } } </script> </body> </html>
|
6、onkeydown
按键按下的时候触发的操作
下面是判断输入的按键内容的js代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <input type="text" id="d1"> <script> var ele=document.getElementById("d1"); ele.onkeydown =function(e){ var num=e.keyCode; var key=String.fromCharCode(num); alert(key); } </script> </body> </html>
|
7、onmouseout与onmouseleave事件的区别
1.不论鼠标指针离开被选元素还是任何子元素,都会触发 mouseout 事件。
2.只有在鼠标指针离开被选元素时,才会触发 mouseleave 事件。
以后推荐是使用mouseleave
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> #container{ width: 300px; background-color: purple; text-align: center; } #title{ line-height: 50px; } #list{ display: none; } #list div{ line-height: 50px; } #list .item1{ background-color: green; } #list .item2{ background-color: red; } #list .item3{ background-color: yellow; } </style> </head> <body> <div id="container"> <div id="title">mouse演示</div> <div id="list"> <div class="item1">111</div> <div class="item2">222</div> <div class="item3">333</div> </div> </div> <script> var container=document.getElementById("container"); var list =document.getElementById("list"); var title = document.getElementById("title"); title.onmouseover = function(){ list.style.display = "block" } // container.onmouseout=function(){ // list.style.display='none' // } container.onmouseleave=function(){ list.style.display='none' } </script> </body> </html>
|
练习
模态对话框
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> .back{ background-color: white; height: 2000px; } .shade{ position :fixed; top: 0; bottom :0; left: 0; right: 0; background-color: grey; opacity: 0.4; } .hide{ display: none; } .models{ position: fixed; top: 50%; left: 50%; margin-left: -300px; margin-top: -100px; height: 300px; width: 300px; background-color: wheat; } </style> </head> <body> <div class="back"> <input type="button" class="c" value="click"> </div> <div class="shade hide handles"></div> <div class="models hide handles"> <input type="button" class="c" value="cancel"> </div> <script> var eles= document.getElementsByClassName("c"); var handles = document.getElementsByClassName("handles"); console.log(eles); console.log(handles); for (var i=0;i<eles.length;i++){ eles[i].onclick=function(){ if (this.value == "click"){ for(var j=0;j<handles.length;j++){ handles[j].classList.remove("hide"); } } else{ for (var j=0;j<handles.length;j++){ handles[j].classList.add("hide"); } } } } </script> </body> </html>
|
表格 全选 反选 取消
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <button class="select_all">全选</button> <button class="select_reverse">反选</button> <button class="cancel">取消</button> <hr> <table class="server_table" border="2px"> <tr> <td><input type="checkbox" class="item"></td> <td>111</td> <td>111</td> <td>111</td> </tr> <tr> <td><input type="checkbox" class="item"></td> <td>222</td> <td>222</td> <td>222</td> </tr> <tr> <td><input type="checkbox" class="item"></td> <td>333</td> <td>333</td> <td>333</td> </tr> </table> <script> var input_arr = document.getElementsByClassName("item"); var button_arr = document.getElementsByTagName("button"); for (var i=0;i<button_arr.length;i++){ button_arr[i].onclick=function(){ for (var j=0;j<input_arr.length;j++){ var inp = input_arr[j]; console.log(inp); if (this.innerText=="全选"){ inp.checked = true; } else if(this.innerText=="取消"){ inp.checked = false; } else{ if(inp.checked){ inp.checked=false; }else{ inp.checked=true; } } } } } </script> </body> </html>
|
select移动
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> .outer{ margin: 0 auto; background-color: gray; width: 80%; height: 600px; margin-top:30px; } #left{ display: inline-block; width: 100px; height: 140px; background-color: wheat; text-align: center; } #choice{ display: inline-block; height: 140px; background-color: green; vertical-align: top;//基线 padding: 0 5px; } #choice button{ margin-top: 20px; } #right{ display: inline-block; width: 100px; height: 140px; line-height: 140px; background-color: wheat; text-align: center; } </style> </head> <body> <div class="outer"> <select name="" id="left" size="4" multiple="multiple"> <option >西游记</option> <option >水浒传</option> <option >红楼梦</option> <option >三国演义</option> </select> <span id="choice"> <button id="choice_move"> > </button> <br> <button id="all_move"> >> </button> </span> <select name="" id="right" multiple="multiple" size="5"> <option >默认</option> </select> </div> <script> var choice_move=document.getElementById("choice_move"); var all_move=document.getElementById("all_move"); var right=document.getElementById("right"); var left=document.getElementById("left"); var options=left.options; choice_move.onclick=function(){ for (var i = 0; i < options.length; i++) { var option = options[i]; if (option.selected==true){ right.appendChild(option); i--; } } } all_move.onclick=function(){ for (var j=0; j<options.length;j++){ var option=options[j]; right.appendChild(option); j--; } } </script> </body> </html>
|