概念
JavaScript分为ECMAScript,DOM,BOM
BOM(Browser Object Model) 是指浏览器对象模型,它使JavaScript有能力与浏览器进行对话。
DOM(Document Object Model) 是指文档对象模型,通过它,可以访问HTML文档的所有元素。
Window对象是客户端JavaScript最高层对象之一,由于window对象是其他大部分对象的共同祖先,在调用window对象的方法和属性时,可以省略window对象的引用。例如:window.document.write()可以简写成:document.write()。
BOM对象(重点)
windwo对象
所有浏览器都支持window对象。
概念上讲,一个HTML文档对应一个window对象
功能上讲,控制浏览器窗口的。
使用上讲,window对象不需要创建对象,直接使用即可。
对象方法
alert() //显示带有一段消息和一个确认按钮的警告框 confirm() //显示带有一段消息以及确认按钮和取消按钮的对话框。 prompt() //显示可提示用户输入的对话框。 open() //打开一个新的浏览器窗口或查找一个已命名的窗口。 close() //关闭浏览器窗口。 setInterval() //按照指定的周期(以毫秒计)来调用函数或计算表达式 clearInterval() //取消由setInterval()设置的timeout。 setTimeout() //在指定的毫秒数后调用函数或计算表达式 clearTimeout() //取消由setTimeout()方法设置的timeout. scrollTo() //把内容滚动到指定的坐标。
方法使用
window.open(); window.alert(123); window.confirm(546); window.prompt("请输入信息",“hahaha”); window.close(); //====================== function foo(){ console.log("hello!"); } var ID = setInterval(foo,2000);//每隔2秒执行一下foo函数,如果不取消就会一直执行下去。 clearInterval(ID); //取消定时器 //======================= function foo(){ console.log("hello"); } var ID=setTimeout(foo,2000); clearTimeout(ID);
DOM对象(重点)
什么时HTML DOM
HTML Document Object Model(文档对象模型)
HTML DOM 定义了访问和操作HTML文档的标准方法
HTML DOM 把 HTML文档呈现为带有元素,属性和文本的树结构(节点树)
DOM树
画DOM树是为了展示文档中各个对象之间的关系,用于对象的导航。
DOM节点
DOM标准规定HTML文档中的每个成分都是一个节点(node):
文档节点(document对象):代表整个文档
元素节点(element对象):代表一个元素(标签)
文本节点(text对象):代表元素(标签)中的文本
属性节点(attribute对象):代表一个属性,元素(标签)才有属性
注释是注释节点(comment对象)
JavaScript可以通过DOM创建动态的HTML:
JavaScript能够改变页面中的所有HTML元素
JavaScript能够改变页面中的所有HTML属性
JavaScript能够改变页面中的所有CSS样式
JavaScript能够对页面中的所有事件做出反应
查找标签
直接查找
document.getElementById //根据ID获取一个标签 document.getElementByClassName //根据class属性获取 document.getElementByTagName //根据标签名获取标签合集
间接查找
parentElement //父节点标签元素 children //所有子标签 firstElementChild //第一个子标签元素 lastElementChild //最后一个子标签元素 nextElementSibling //下一个兄弟标签元素 previousElementSibling //上一个兄弟标签元素
节点操作
创建节点
var divEle = document.createElement('div');
添加节点
var imgEle = document.createElement("img"); imgEle.setAttribute("src","http://image11.m1905.cn/uploadfile/s2010/0205/20100205083613178.jpg"); //设置属性值 var d1Ele = document.getElementById("d1"); d1Ele.appendChild(imgEle); //追加一个子节点(作为最后的子节点) //somenode.insertBefore(newonode,某个节点); 把增加的节点放到某个节点的前面。
删除节点
var d1Ele = document.getElementById('d1');//获取父节点 d1Ele.removeChild(imgEle); //通过父元素调用该方法删除imgEle节点
替换节点
//语法: somenode.replaceChild(newnode,某个节点)
属性节点
获取文本节点的值:
var divEle = document.getElementBy("d1"); divEle.innerText divEle.innerHTML
设置文本节点的值:
var divEle = document.getElementById("d1"); divEle.innerText = "1"; divEle.innerHTML = "<p>2</p>";
attribute操作
var divEle = document.getElementById("d1"); divEle.setAttribute("age","18"); //设置自定义属性和自带属性 都可以 divEle.setAttribute("age"); divEle.removeAttribute("age"); //自带的属性还可以直接.属性名来获取和设置 imgEle.src imgEle.src = "..."
获取值操作
语法:
elementNode.value
适用于以下标签:
input
select
textarea
var iEle = document.getElementById("i1"); console.log(iEle.value); var sEle = document.getElementById("s1"); console.log(sEle.value); var tEle = document.getElementById("t1"); console.log(tEle.value);
class的操作
className //获取所有的样式类名 classList.remove(cls) 删除指定类 classList.add(cls) 添加类 classList.contains(cls) 存在返回true,否则返回false classList.toggle(cls) 存在就删除,否则添加
示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .c1{ height: 400px; width: 400px; border-radius: 50%; } .red_cls{ background-color: red; } .green_cls{ background-color: green; } </style> </head> <body> <div class="c1 red_cls green_cls"> </div> <script> var divEle = document.getElementsByTagName('div')[0]; function foo(){ divEle.classList.toggle('green_cls'); } setInterval(foo,1000); </script> </body> </html>自动开关灯操作
指定CSS操作
obj.style.backgroundcolor = "red";
JS操作CSS属性的规律:
1.对于没有中横线的CSS属性一般直接使用style.属性名即可。如:
obj.style.margin obj.style.width obj.style.left obj.style.position
2.对于含有中横线的CSS属性,将中横线后面的第一个字母换成大写即可。如
obj.style.marginTop obj.style.borderLeftWidth obj.style.zIndex obj.style.fontFamily
绑定事件
常用事件
onclick 当用户点击某个对象时调用的事件句柄。 ondblclick 当用户双击某个对象时调用的事件句柄。 onfocus 元素获得焦点。 // 练习:输入框 onblur 元素失去焦点。 应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证. onchange 域的内容被改变。 应用场景:通常用于表单元素,当元素内容被改变时触发.(select联动) onkeydown 某个键盘按键被按下。 应用场景: 当用户在最后一个输入框按下回车按键时,表单提交. onkeypress 某个键盘按键被按下并松开。 onkeyup 某个键盘按键被松开。 onload 一张页面或一幅图像完成加载。 onmousedown 鼠标按钮被按下。 onmousemove 鼠标被移动。 onmouseout 鼠标从某元素移开。 onmouseover 鼠标移到某元素之上。 onselect 在文本框中的文本被选中时发生。 onsubmit 确认按钮被点击,使用的对象是form。
绑定方式
方式一:
<div id="d1" onclick="changeColor(this);">点我</dic> <script> function changeColor(this){ this.style.backgroundColor="green"; } </script>
注意: this是实参,表示触发事件当前元素
函数定义过程中的this为形参
方式二:
<div id="d2">点我</div> <script> var divEle2 = document.getElementById("d2"); divEle2.onclick = function(){ this.innerText=""呵呵"; } </script>
事件示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <input type="text"> <button id="i1">开始</button> <button id="i2">暂停</button> <script> var t = null; var inputEle = document.getElementsByTagName('input')[0]; var b1Ele = document.getElementById('i1'); var b2Ele = document.getElementById('i2'); function showtime() { var gettime = new Date(); inputEle.value = gettime.toLocaleString(); } b1Ele.onclick = function () { if (!t){ t = setInterval(showtime,1000); } }; b2Ele.onclick = function () { clearInterval(t); t = null; } </script> </body> </html>定时器示例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <input type="text" value="哈哈"></input> <script> var inputEle = document.getElementsByTagName('input')[0]; inputEle.onfocus = function () { inputEle.value = '' }; inputEle.onblur = function () { inputEle.value = '请输入' } </script> </body> </html>搜索框示例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <select name="" id="i1"> <option value="">--请选择--</option> </select> <select name="" id="i2"> <option value="">--请选择--</option> </select> <script> var se1Ele = document.getElementById('i1'); var se2Ele = document.getElementById('i2'); var data = {"河北省": ["廊坊", "邯郸"], "北京": ["朝阳区", "海淀区"], "山东": ["威海市", "烟台市"]}; for (var i in data){ var optEle = document.createElement('option'); optEle.innerText=i; optEle.value = i; se1Ele.appendChild(optEle); } se1Ele.onchange = function () { var currentPro = se1Ele.value; var currentCityList = data[currentPro]; se2Ele.innerText = ''; se2Ele.innerHTML = '<option value="">--请选择--</option>'; for(let i = 0;i<currentCityList.length;i++){ var optEle2 = document.createElement('option'); optEle2.innerText = currentCityList[i]; optEle2.value = currentCityList[i]; se2Ele.appendChild(optEle2); } } </script> </body> </html>select 省市联动