4 BOM&DOM编程
BOM&DOM
BOM
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>BOM对象</title> </head> <body> <!-- 浏览器对象模型 BOM--> <!-- 1.window alert() confirm() prompt() setInterval() setTimeout() 2.location href hash url ... reload() 3.screen 4.history go() --> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>alert| confirm| prompt</title> </head> <body> <script type="text/javascript"> window.alert('mjj'); var a = window.confirm('你确定要离开网站?'); console.log(a); var name = window.prompt('请输入你早晨吃了什么?','mjj'); console.log(name); </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>setTimeout()| setInterval()</title> </head> <body> <script type="text/javascript"> // 一次性定时器 window.setTimeout(function(){ console.log('mjj'); },1000) console.log('xiongdada'); //周期性循环定时器 var num = 0; var timer = null; timer = setInterval(function(){ num++; if (num > 5) { clearInterval(timer); return; } console.log('num:'+ num); },1000); </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>location对象</title> </head> <body> <span>luffy</span> <form> <input type="text" name="user"> <input type="password" name="pwd"> <input type="submit"> </form> <script type="text/javascript"> // console.log(location.host); // location.hostname; // location.port; // location.href; // location.pathname; // location.protocol; // location.search; var oSpan = document.getElementsByTagName("span")[0]; oSpan.onclick = function () { location.href = "http://www.luffycity.com"; //点击span时,跳转到指定链接 // window.open("http://www.luffycity.com"","_blank"); //方式二 跳转 } </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>如何访问每个查询字符串参数</title> </head> <body> <script type="text/javascript"> // http://192.168.12.4:8080/04%20location%E5%AF%B9%E8%B1%A1.html?user=mjj&pwd=123 // ?user=mjj&pwd=123 /* var args = { user:'mjj', pwd:'123' } */ function getQueryString(){ // 1.取得去掉问号查询字符串 user=mjj&pwd=123 var qs = location.search.length > 0 ? location.search.substring(1): ''; // 2.取得每一项 存放到数组中 var items = qs.length ? qs.split('&'): []; //["name=mjj", "pwd=123"] var item = null,name = null,value = null,args = {}; for(var i = 0; i < items.length; i ++){ item = items[i].split('='); //['name%20','mjj'] name = decodeURIComponent(item[0]); value = decodeURIComponent(item[1]); if (name.length) { args[name] = value; } } return args; } var args = getQueryString(); console.log(args.name); console.log(args.pwd); </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>位置操作</title> </head> <body> <script type="text/javascript"> console.log('mjj') // 2秒之后跳转小猿圈 的web页面 setTimeout(function(){ // location.href = 'https://www.apeland.cn/web'; //产生历史记录 // location.replace('https://www.apeland.cn/web'); // location.reload(); },2000) </script> </body> </html>
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>navigator对象</title> </head> <body> <script type="text/javascript"> console.log(navigator.plugins); function hasPlugin(name){ // 如果有插件 返回true 反之亦然 name = name.toLowerCase(); for(var i = 0; i < navigator.plugins.length; i++){ if(navigator.plugins[i].name.toLowerCase().indexOf(name) > -1){ // 有此插件 return true; }else{ return false; } } } alert(hasPlugin('Flash')); alert(hasPlugin('Chrome PDF Plugin')); </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>history对象</title> </head> <body> <script type="text/javascript"> // console.log(history); var count = 0; setTimeout(function(){ count++; // console.log(count); history.go(-2);//0刷新 },2000) </script> </body> </html>
DOM
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>class list</title> </head> <body> <h2>你要买什么课程?</h2> <p title='请您选择购买的课程'>本课程是web全栈课程,期待你的购买!</p> <ul id='classList'> <li class='item'>JavaScript</li> <li class='item'>css</li> <li>DOM</li> </ul> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>02 节点</title> </head> <body> <p title="我是mjj" class="" id="">mjj</p> <ul> <li></li> </ul> <!-- 节点 node--> <!-- 1.元素节点(element node) 2.文本节点 (text node) 3.属性节点 (attribue node)--> <!-- 没有内容 的文档是没有任何价值的,而大多数内容都是有文本提供--> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>class list</title> </head> <body> <h2>你要买什么课程?</h2> <p title='请您选择购买的课程'>本课程是web全栈课程,期待你的购买!</p> <ul id='classList'> <li class='item'>JavaScript</li> <li class='item'>css</li> <li>DOM</li> </ul> <!-- 节点类型: 1.元素节点 2.属性节点 3.文本节点 --> <script type="text/javascript"> // 1.document.getElementById() 单个对象 var eleNode = document.getElementById('classList'); console.log(eleNode); console.log(typeof eleNode); // 2.document.getElementsByTagName() 获取出来的是一个节点对象集合 有点像数组 push() var olis = document.getElementsByTagName('li'); var oTitle = document.getElementsByTagName('h2'); console.log(oTitle[0]); console.log(olis.length); for(var i = 0; i < olis.length; i ++){ console.log(olis[i]); } console.log(typeof olis); // 3.document.getElementsByClassName('item');获取出来的是一个节点对象集合 var oItems = document.getElementsByClassName('item'); console.log(oItems); </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>class list</title> <style type="text/css"> #box{ color: red; } </style> </head> <body> <h2>你要买什么课程?</h2> <p title='请您选择购买的课程'>本课程是web全栈课程,期待你的购买!</p> <ul id='classList'> <li class='item'>JavaScript</li> <li class='item'>css</li> <li>DOM</li> </ul> <!-- --> <script type="text/javascript"> var oP = document.getElementsByTagName('p')[0]; // 获取属性值 有一个必需的参数,这个节点对象的名字 var title = oP.getAttribute('title'); var className = oP.getAttribute('class'); console.log(title); console.log(className); // 设置属性值 setAttribute(name,value) oP.setAttribute('id', 'box'); //不改变源码,动态加载 </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>节点属性</title> </head> <body> <!-- nodeName nodeValue nodeType --> <div id="box" title="我是文本">我是一个文本节点<!--我是注释--></div> <script type="text/javascript"> // 1.元素节点 var oDiv = document.getElementById('box'); console.log(oDiv.nodeName + "| " + oDiv.nodeValue + "| " + oDiv.nodeType); // 2.获取属性节点 var attrNode = oDiv.attributes[0]; console.log(attrNode.nodeName + "| " + attrNode.nodeValue + "| " + attrNode.nodeType); // 3.获取文本节点 var textNode = oDiv.childNodes[0]; console.log(textNode.nodeName + "| " + textNode.nodeValue + "| " + textNode.nodeType); // 4.获取注释节点 var commentNode = oDiv.childNodes[1]; console.log(commentNode.nodeName + "| " + commentNode.nodeValue + "| " + commentNode.nodeType); console.log(document.nodeType); </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>节点对象的其它常用属性</title> </head> <body> <div class="previous">我是上个兄弟</div> <div id="father"> <p>mjj</p> <p>mjj2</p> </div> <div class="sibling">我是下个兄弟</div> <script type="text/javascript"> var oFather = document.getElementById('father'); console.log(oFather.childNodes); // console.log(oFather.childNodes[0]); // console.log(oFather.firstChild); // console.log(oFather.childNodes[oFather.childNodes.length - 1]); // console.log(oFather.lastChild); // console.log(oFather.parentNode.parentNode); console.log(oFather.nextSibling);//下一个兄弟 // console.log(oFather.previousSibling); //上一个兄弟 function get_childNodes(fatherNode){ var nodes = fatherNode.childNodes; var arr = [];//保存已经获取的元素节点对象 for(var i = 0; i < nodes.length; i++){ if (nodes[i].nodeType === 1) { arr.push(nodes[i]); } } return arr; } var childnodes = get_childNodes(oFather); console.log(childnodes[0]); function get_nextSibling(n){ var x = n.nextSibling; while(x && x.nodeType != 1){ x = x.nextSibling; } return x; } console.log(get_nextSibling(oFather)); </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>07 节点方法</title> <style type="text/css"> .active{ color: red; font-size: 30px; } </style> </head> <body> <div id="box"> <p id="active">mjj</p> </div> <!-- 动态的操作节点 1.创建节点 createElement() 2.插入节点 appendChild() insertBefore(newNode,node) 3.删除节点 removeChild(childNode) 4.替换节点 replaceChild(newNode,node) 5.创建文本节点 createTextNode() 6.标签文本内容值的操作使用的是 " innerHTML 或 innerText" input输入框是:value --> <script type="text/javascript"> var oDiv = document.getElementById('box'); var oAtive = document.getElementById('active'); var newNode = document.createElement('p'); var newNode2 = document.createElement('p'); var newNode3 = document.createElement('a'); console.log(newNode === newNode2); newNode.innerHTML = '<a href="#">alex@qq.com</a>'; newNode2.innerHTML = '<a href="#">mjj@qq.com</a>'; newNode3.setAttribute('href','http://www.baidu.com'); newNode3.innerHTML = '百度一下'; newNode.setAttribute('class', 'active'); oDiv.appendChild(newNode); // 第一个参数是新插入的节点,第二个参数是参考的节点 oDiv.insertBefore(newNode2,oAtive); /* var textNode = document.createTextNode('alex'); newNode.appendChild(textNode); */ newNode = null;//释放对象 // oDiv.removeChild(oAtive); 删除操作 oDiv.replaceChild(newNode3, oAtive) // newNode.innerText = '<a href="#">alex@qq.com</a>'; </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>动态操作样式</title> <style type="text/css"> .highLight{ background-color: black; color: white; width: 250px; height: 250px; line-height: 250px; text-align: center; font-size: 30px; } </style> </head> <body> <p id='box'>MJJ</p> <script type="text/javascript"> // nodeObj.style var para = document.getElementById('box'); /* 1、直接操作样式属性 console.log(para.style); para.style.color = 'white'; para.style.backgroundColor = 'black'; para.style.width = '250px'; para.style.height = '250px'; para.style.textAlign = 'center'; para.style.lineHeight = '250px'; para.style.fontSize = '30px'; */ // 2、通过控制属性的类名来控制样式 para.setAttribute('class', 'highLight'); </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>事件</title> <style type="text/css"> #box{ width: 100px; height: 100px; background-color: blue; } </style> </head> <body> <!-- <div id="box" onclick="add();"></div> --> <div id="box" ></div> <script type="text/javascript"> var oDiv = document.getElementById('box'); var isBlue = true; oDiv.onclick = function(){ if (isBlue) { // this 指向了当前的元素节点对象 this.style.backgroundColor = 'red'; isBlue = false; }else{ this.style.backgroundColor = 'blue'; isBlue = true; } }; // function add(){ // alert(1111); // } </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>onmouseover()和onmouseout()事件</title> <style type="text/css"> #box{ width: 200px; height: 200px; background-color: red; } </style> </head> <body> <div id="box"> </div> <script type="text/javascript"> // 1.找开关 2.摁一下 3.灯亮了 // 1.找到触发的事件对象 var oDiv = document.getElementById('box'); // 2.鼠标滑过事件 oDiv.onmouseover = function(){ console.log(111); // 3.事件处理程序 this.style.backgroundColor = 'green'; } // 2.鼠标移开事件 oDiv.onmouseout = function(){ // 3.事件处理程序 this.style.backgroundColor = 'red'; } </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>光标聚焦和失焦事件</title> <style type="text/css"> .text{ color: red; font-size: 12px; } </style> </head> <body> <form action=""> <p class="name"> <label for="username">用户名:</label> <input type="text" name="user" id="username"> </p> <p class="pwd"> <label for="pwd">密码:</label> <input type="password" name="wpd" id="pwd"> </p> <input type="submit" name=""> </form> <script type="text/javascript"> var userName = document.getElementById('username'); var newNode = document.createElement('span'); //光标聚集 userName.onfocus = function(){ newNode.innerHTML = '请输入用户名'; newNode.setAttribute('class', 'text') userName.parentNode.appendChild(newNode); } //失焦 userName.onblur = function(){ newNode.innerHTML = '请输入正确的用户名'; newNode.setAttribute('class', 'text') userName.parentNode.appendChild(newNode); } </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>内容选中事件和内容改变事件</title> </head> <body> <!-- onselect onchange --> <textarea cols="30" rows="10">请写入个人简介,字数不少于200字</textarea> <input type="text" name="" value="mjj"> <script type="text/javascript"> var textArea = document.getElementsByTagName('textarea')[0]; var inputObj = document.getElementsByTagName('input')[0]; textArea.onselect = function(){ console.log('内容被选中'); } inputObj.onchange = function(){ console.log('内容被改变了'); } /* inputObj.oninput = function(){ console.log('内容被实时改变了'); console.log(this.value); } */ </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>窗口加载事件</title> <script type="text/javascript"> /* setTimeout(function(){ var oDiv = document.getElementById('box'); console.log(oDiv); oDiv.onclick = function(){ this.innerHTML = 'alex'; } }, 0) */ // 等待文档元素加载完成才会调用onload() window.onload = function(){ var oDiv = document.getElementById('box'); console.log(oDiv); oDiv.onclick = function(){ this.innerHTML = 'alex'; } } // window.onload = function(){ // console.log(11111); // } </script> </head> <body> <div id="box">MJJ</div> </body> </html>
DOM Document Object Model 文档对象模型 var person = { name:'mjj', fav:function(){ } } js中对象分类三种: 1.用户定义对象 2.内建对象 Array Date Math 3.宿主对象 Model Map(地图) DOM 看作一颗“树” DOM把文档看作一颗“家谱树” parent child sibling 爷爷 爸爸 叔叔 你 妹妹 表兄弟
练习一下
1.声明一个add函数,要求函数有返回值,并打印结果 <script type="text/javascript"> function add(x,y){ var result = x * y; return result; } var r = add(10,20); console.log(r) </script> 2.对“hello world”进行翻转处理 要求变为:"dlorw olleh" <script type="text/javascript"> function reverseString(str){ array =str.split("") array = array.reverse() str=array.join("") return str; } console.log(reverseString("hello world")) </script> 3.如何定义一个对象?使用字面量方式 要求:该对象有名字、年龄、爱好多个 <script type="text/javascript"> var andy = { name:'andyzhang', age:34, hobby:"lookMovie,ball,eat" } console.log(andy) </script> 4.setTimeout()和setInterval()的区别?如何理解他们的作用 在js中有两种定时器: 一次性定时器:setTimeout() 周期性循环定时器: setInterval() 对于这两个方法,需要注意的是如果要求在每隔一个固定的时间间隔后就精确地执行某动作,那么最好使用setInterval,而如果不想由于连续调用产生互相干扰的问题,尤其是每次函数的调用需要繁重的计算以及很长的处理时间,那么最好使用setTimeout 5.对于标签文本内容值的操作使用的是哪个属性?input输入框呢? 标签文本内容值的操作使用的是 " innerHTML 或 innerText" input输入框是:value 6.获取DOM的三种方式? var oDiv1 = document.getElementById("box1"); //方式一:通过id获取单个标签 var oDiv2 = document.getElementsByTagName("div")[0]; //方式二:通过 标签名 获得 标签数组,所以有s var oDiv3 = document.getElementsByClassName("box")[0]; //方式三:通过 类名 获得 标签数组,所以有s 7.如何设置标签属性的值?比如类名如何设置?如何设置多个类型 双闭合标签: innerText或者innerHTML 单闭合标签:除了img标签,就剩input了,使用value进行赋值 所谓标签属性,就是对标签中(字面上看到的)属性的操作。比如像每个标签中id,class,title、img 标签的src属性和alt属性、a标签的href属性、input标签中的name、type属性等等 设置类名例: //获取事件源 <p id="oP">练习</p> var opClass = document.getElementById('oP') var opClass.οnmοuseοver=function(){ opClass.className = "className" } 所谓标签属性,就是对标签中(字面上看到的)属性的操作。比如像每个标签中id,class,title,img标签的src属性和 alt属性、a标签的href属性、imput标签中的name、type属性等等 8.列举你知道的js事件 onclick 鼠标单击 ondblclick 鼠标双击 onkeyup 按下并释放键盘上的一个键时触发 onchange 文本内容或下拉菜单中的选项发生改变 onfocus 获得焦点,表示文本框等获得鼠标光标 onblur 失去焦点,表示文本框等失去鼠标光标 onmouseover 鼠标悬停,即鼠标停留在图片等的上方 onmouseout 鼠标移出,即离开图片等所在的区域 onload 网页文档加载事件 onunload 关闭网页时 onsubmit 表单提交事件 onreset 重置表单时 9.如何设置样式属性?比如设置该div的背景颜色为红色 例 : <style> .inp{ background-color:red; } </style> <body> <input type="text" value =" 测试" class="inp"> </body> 10.使用DOM操作,创建一个p标签,设置内容为alexsb,将p标签插入到div中。 然后点击某个删除按钮,移除当前创建的p标签(练习dom的创建,修改内容,追加,删除) <body> <button id = 'btn'> 按钮添加</button> <button id="btn1">按钮删除</button> </body> <script type="text/javascript"> var oBtn = document.getElementById('btn') var oBtn1 = document.getElementById('btn1') //定义div,p标签 var oDiv = document.createElement('div') var oP = document.createElement('p') oDiv.appendChild(oP) oDiv.id = "box"; oP.id='content'; oP.innerText = "alexsb" oBtn.onclick = function(){ //动态添加div 标签到页面 this.parentNode.insertBefore(oDiv,oBtn) } oBtn1.οnclick=function(){ oBtn1.parentNode.removeChild(oDiv) } </script> 11.如何打开一个新的网站,比如打开路飞学城官网 1、设置 a 标签,点击触发。 <a id="text" href="https://www.luffycity.com">路飞学城</a>
作者:华王
博客:https://www.cnblogs.com/huahuawang/