一.js的简介 1.什么是js js可以嵌套到HTML中(基于对象)和(事件触发)的脚本语言 特点 A.交互性 B.安全性 js不能直接访问本地磁盘 C.跨平台 浏览器只要具备js解析器 2.js能干嘛 1)js动态修改(新增、删除)HTML标签和CSS代码 2)js动态做校验数据 3)js的历史及组成 ECMAScript(js的基本语法和对象) BOM(浏览器对象模型) DOM(文档对象模型) 4)js的引用方式 A.内嵌脚本 <input type="button" value="button" οnclick="alert('XXX')"/> B.内部脚本 <input type="button" value="button"/> <script type="text/javascript"> alert('XXX'); </script> C.外部脚本 1.创建一个js文件 2.在HTML中引入js脚本 <input type="button" value="button"/> <script type="text/javascript" src="demo1.js"></script> 总结: 1.JS往哪儿放 在不影响HTML页面加载效果情况下,越晚加载越好 2.编程建议 <script>引入外部文件的时候 标签中不建议写脚本内容 二.js的基本语法 1)变量 var a=12; a="javascript"; a='哈哈'; var b=true; 2)原始数据类型(了解) 1)number:数字类型 2)string:字符串类型 3)boolean:布尔类型 4)null:空类型 5)undefined:未定义的 注意: number string boolean 伪对象 数据类型转换 number boolean 转 string toString() string boolean 转 number parseInt() parseFloat() boolean类型 parseInt() 不能转 number NaN string类型 parseInt()可以转 number '123哈哈456' 转'123' string number 转 boolean Boolean() number转 boolean 可以 非0为true 0为false string转boolean 可以 非空为true 空为false string boolean 转 number Number() boolean类型 Number() 可以转 number true 1 false 0 string类型 Number() 如果是数字可以转 如果 '123哈哈' 转换结果 NaN 3)引用数据类型 java:Object obj=new Object(); js: var obj=new Object(); 4)运算符 1.赋值运算符 = var a=5; 2.算术运算符 + - * / % ++ -- +:遇到字符串 连接符 拼接 -:遇到字符串 转为数字 Number() 再计算 *:遇到字符串 转为数字 Number() 再计算 /:遇到字符串 转为数字 Number() 再计算 7/2=3.5 number 3.逻辑运算符 && || 4.比较运算符 > < >= <= == != == :忽略数据类型的 值比较 ===:全等 比较值与数据类型 5.三目运算符 3>2?"大于":"小于" 6.void运算符 <a href="javascript:void(0)">点击我吧</a> 7.类运算符 typeof() :判断数据类型 返回 数据的该类型 instanceof:判断类型 返回 布尔值 alert(typeof(obj));//object alert(obj instanceof Object);//true 5)逻辑语句 if:条件 number转 boolean 可以 非0为true 0为false string转boolean 可以 非空为true 空为false switch: jdk1.7 string for: for in ***** var arr=[1,2,3,"aa",true]; for(index in arr){ alert(arr[index]); }
三.js的内置对象 1.Number var myNum=new Number(value); var myNum=Number(value); 方法: toString 把数字转换为字符串,使用指定的基数。 valueOf 返回一个 Number 对象的基本数字值。 2.Boolean var flag=new Boolean(value); //构造函数 var flag=Boolean(value); //转换函数 方法: toString() 把逻辑值转换为字符串,并返回结果。 valueOf() 返回 Boolean 对象的原始值。 3.String new String(s); String(s); 方法 length 字符串的长度 charAt() 返回在指定位置的字符。 charCodeAt() 返回在指定的位置的字符的 Unicode 编码。 indexOf() 检索字符串。 lastIndexOf() 从后向前搜索字符串。 split() 把字符串分割为字符串数组。 substring() 提取字符串中两个指定的索引号之间的字符。 substr() 从起始索引号提取字符串中指定数目的字符。 toUpperCase() 把字符串转换为大写 4.Array new Array(); new Array(size); new Array(element0, element1, ..., elementn); var arr=[]; var arr=[1,"aa"]; 属性: length 设置或返回数组中元素的数目。 方法: join() 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。 pop() 删除并返回数组的最后一个元素 push() 向数组的末尾添加一个或更多元素,并返回新的长度。 reverse() 颠倒数组中元素的顺序。 sort() 对数组的元素进行排序 5.Date var myDate=new Date() 方法 getFullYear() 从 Date 对象以四位数字返回年份 getMonth() 从 Date 对象返回月份 (0 ~ 11)。 getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)。 getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6)。 getTime() 返回 1970 年 1 月 1 日至今的毫秒数。 toLocaleString() 根据本地时间格式,把 Date 对象转换为字符串。 **** 6.Math var pi_value=Math.PI; var sqrt_value=Math.sqrt(15); 注释:Math 对象并不像 Date 和 String 那样是对象的类,因此没有构造函数 Math(), 像 Math.sin() 这样的函数只是函数,不是某个对象的方法。您无需创建它,通过把 Math 作为对象使用就可以调用其所有属性和方法。 方法: PI 返回圆周率(约等于3.14159)。 abs(x) 返回数的绝对值。 ceil(x) 对数进行上舍入。 floor(x) 对数进行下舍入。 round(x) 把数四舍五入为最接近的整数。 sqrt(x) 返回数的平方根。 pow(x,y) 返回 x 的 y 次幂。 ** random() 返回 0 ~ 1 之间的随机数。 *** 7.RegExp var reg=new RegExp(pattern); 可选参数: attributes var reg=/^正则表达式$/ 属性方法: [0-9]:数字 [A-Z]:A-Z [a-z]:a-z [A-z]:所有字母(大小写字母) \d:代表数值 \D:非数值 \w:单词字符 \W:非单词字符 \s:查找的空白字符 \S:查找的非空白字符 n+:至少一次 n*:出现0次或多次 n?:出现0次或1次 {5}:出现5次 {2,8}:出现2~8次 方法 test 检索字符串中指定的值。返回 true 或 false 四.js的函数 1.js函数定义方式 A.普通函数 语法: function 函数名(参数列表){函数体} 实例: function method(){ alert("XXX"); } method(); B.匿名函数(闭包) 语法: var 函数名=function(){} 案例: var method=function (){ alert("XXX"); } method(); C.对象函数(了解) 语法: new Function(参数1,参数2,参数3); 注意点: 1.形参只能是string类型 ,最后一个只能是函数体 2.函数体也是string 案例: var fn=new Function("a","b","alert(a+b)"); fn(2,22); 2.函数中的参数问题 1.形参不用var来修饰 2.形参和是实参个数可以不一样(只多不少) 案例: function fn(a,b,c){ var sum=a+b+c; alert(sum); //arguments 数组内部对参数进行封装的对象 for(var i=0;i<arguments.length;i++){ alert(arguments[i]); } } fn(1,2,3,4,5); 3.函数中返回值问题 1.定义函数的时候不用定义返回值类型 var 2.返回值可以通过return体现 案例: function fn(a,b){ return a+b; } alert(fn(2,3)); 4.js中的全局函数 1)编码问题 decodeURI() 解码某个编码的 URI。 encodeURI() 把字符串编码为 URI。 decodeURIComponent() 解码一个编码的 URI 组件。 encodeURIComponent() 把字符串编码为 URI 组件。 unescape() 对由 escape() 编码的字符串进行解码。 escape() 对字符串进行编码。 2)强转 parseInt() parseFloat() 3) Number() Boolean() 4)***** eval(); 计算 javascript字符串 把它们作为脚本代码执行
五.js的事件**** 事件 事件源 响应行为 1)事件的绑定方式*** A.将事件与响应行为内嵌到HTML代码中 <input type="button" value="button" οnclick="alert('XXX')"/> B.将事件内嵌到HTML代码中,将响应行为封装成函数** <input type="button" value="button" οnclick="fn()"/> <script type="text/javascript"> function fn(){ alert('XXX'); } </script> C.事件与响应结果完全从HTML分离出来*** <input type="button" value="button123" id="btn"/> <script type="text/javascript"> var btn=document.getElementById("btn"); //alert(btn.value); btn.οnclick=function fn(){ alert('XXX'); } </script> 2)常用的事件 A.onclick()点击事件 B.onchange()用户改变域的内容 当用户改变域内容会触发该事件 实现二级菜单联动 案例: <body> <select id="city"> <option value="bj">北京</option> <option value="tj">天津</option> <option value="sh">上海</option> </select> <select id="area"> <option>昌平区</option> <option>海淀区</option> <option>朝阳区</option> </select> </body> <script type="text/javascript"> var city=document.getElementById("city"); city.οnchange=function(){ var option=city.value; // alert(option); switch(option){ case 'bj': var area= document.getElementById("area"); area.innerHTML="<option value='cp'>昌平区</option><option value='hd'>海淀区</option><option value='cy'>朝阳区</option>"; break; case 'tj': var area= document.getElementById("area"); area.innerHTML="<option value='tg'>塘沽区</option><option value='nk'>南开区</option>"; break; case 'sh': var area= document.getElementById("area"); area.innerHTML="<option value='pd'>浦东区</option>"; break; } } </script> C.onblur 元素失去焦点 onfocus 元素获得焦点 案例: <body> <label for="txt">用户名:</label> <input type="text" name="username" id="txt"/><span id="active"></span> </body> <script type="text/javascript"> var txt=document.getElementById("txt"); //元素获取焦点事件 txt.οnfοcus=function(){ //绑定友好提示 var span= document.getElementById("active"); span.innerHTML="用户名最少长度是六位";//动态绑定文字 span.style.color="green"; } //元素失去焦点事件 txt.οnblur=function(){ //绑定友好提示 var span= document.getElementById("active"); //alert(txt.value); if(txt.value.length<6){ span.innerHTML="对不起您的格式有误"; span.style.color="red"; }else{ span.innerHTML="√"; span.style.color="green"; } } </script> D.onmouseout 鼠标从某元素移开 onmouseover 鼠标被移到某元素之上 案例: <body> <div id="d1">div</div> </body> <script type="text/javascript"> var div=document.getElementById("d1"); div.οnmοuseοver=function(){ this.style.backgroundColor="green"; } div.οnmοuseοut=function(){ this.style.backgroundColor="red"; } </script> E. onload 某个页面或图像被完成加载 等待页面加载完成之后,在执行onload事件里面的代码 案例: <script type="text/javascript"> window.οnlοad=function(){ var span =document.getElementById("s"); span.innerHTML="HELLOJS"; } </script> </head> <body> <span id="s"></span> </body> 3)阻止事件的默认行为 IE:window.event.returnValue=false;(IE低版本) w3c:传递过来的事件对象.preventDefault(); 案例: <body> <!-- <a href="http://www.baidu.com">点击我吧</a> --> <!-- <a href="demo1.html" οnclick="fn(event)">点击我吧</a> --> <a href="demo1.html" οnclick="return false">点击我吧</a> </body> <script type="text/javascript"> function fn(e){ //IE:window.event.returnValue=false;(IE低版本) //w3c:传递过来的事件对象.preventDefault(); if(e&&e.preventDefault){ alert("w3c"); e.preventDefault();//return false; }else{ alert("ie"); window.event.returnValue=false; } } </script> 4)js中的冒泡事件 阻止事件传播 IE:window.event.cancelBubble=true;//IE低版本 w3c:传递过来的事件对象.stopPropagation(); 案例: <body> <div οnclick="fn1()" style="width: 100px; height: 100px; background-color: blue; padding: 50px;"> <div οnclick="fn2(event)" style="width: 100px; height: 100px; background-color: red;"> XXX </div> </div> </body> <script type="text/javascript"> function fn1(){ window.alert("fn1"); } function fn2(e){ //window.alert("fn2"); // IE:window.event.cancelBubble=true;//IE低版本 // w3c:传递过来的事件对象.stopPropagation(); if(e&&e.stopPropagation){ alert("w3c"); alert("fn2"); e.stopPropagation(); }else{ alert("ie"); alert("fn2"); window.event.cancelBubble=true; } } </script> 六.js的BOM BOM(浏览器对象模型) alert(); window.alert(); 1)window对象 弹框方式 提示弹框 alert(); 确认弹框 confirm(); 确认弹框有返回值:点击确定 true 点击取消(叉) false 输入弹框 prompt(); 输入框有返回值 :点击确定返回输入框的值 点击取消 null "" open() 案例: window.open("../jsCode/demo1.html"); 定时器 A.setTimeout(函数,毫秒值); 过多少毫秒值后调用该函数 (只调用一次) 案例: window.setTimeout(function() { alert("XXX"); }, 3000); B. clearTimeout(参数); 案例: <body> <input type="button" value="button" οnclick="closer()"/> </body> <script type="text/javascript"> /* window.setTimeout(function() { alert("XXX"); }, 3000); */ var timer; var fn=function(){ alert("XXX"); timer=setTimeout(fn, 3000); } var closer=function(){ window.clearTimeout(timer); } fn(); </script> C.setInterval(函数,毫秒值);//过多少毫秒之后 重复调用该函数 clearInterval(参数);清除定时任务 案例: <body> <input type="button" value="button" οnclick="closer()"/> </body> <script type="text/javascript"> var timer=setInterval(function() { alert("nihao"); }, 3000); var closer=function(){ window.clearInterval(timer); } </script> 案例: 注册成功之后,5秒钟跳转到某个页面 <body> 恭喜您,终于注册成功了,<span id="s" style="color: red; font-size: 100px;">5</span>秒钟页面自动跳转,如果不跳转<a href="../jsCode/demo1.html">点击这里</a> </body> <script type="text/javascript"> var time=5; var timer; timer=window.setInterval(function() { var span=document.getElementById("s"); if(time>=1){ span.innerHTML=time; time--; }else{ //页面跳转 事件结束 window.clearInterval(timer); location.href="../jsCode/demo1.html"; } }, 1000); </script> 2.location对象 location.href="链接地址"; location对象不能省 window.location.reload();//页面重新刷新 3.history对象 历史记录 back() forward() go() 案例: <a href="demo8.html">后一页</a> <!-- <input type="button" value="上一页" οnclick="history.back()"/> <input type="button" value="下一页" οnclick="history.forward()"/> --> <input type="button" value="上一页" οnclick="history.go(-1)"/> <input type="button" value="下一页" οnclick="history.go(1)"/> 七.js中DOM DOM(文档对象模型)**** 文档对象模型:用来操作页面元素 DOM:document节点 作用:通过他对页面元素进行操作和定位 NODE操作 1.NODE的元素 A.元素类型 B.文本类型 C.文档类型 D.属性类型 E.注释类型 2.NODE的获取方式 1)通过元素获取 document.getElementById("elementid");****** document.getElementsByName("name");*** document.getElementsByTagName("input");*** document.getElementsByClassName("classname"); 2)通过NODE关系获取引用 document.parentNode;//获取该元素的父节点 document.childNode;//获取该元素的子节点 document.firstChild;//获取该元素的第一个子节点 document.lastChild;//获取该元素的最后一个子节点 document.nextSibling;//获取该元素的下一个兄弟节点 document.previousSibling;//获取该元素的上一个兄弟节点 3)NODE的属性 节点中文 nodeType nodeName nodeVale 元素 1 tagname null 属性 2 attr 属性值 文本 3 #text 文本值 注释 8 #comment 注释的文字 文档 9 #document null 4)NODE节点的增删改查 A.创建一个节点 1)创建一个元素的节点 document.createElement(); 2)创建属性节点:object.attr=val; object.setAttribute(sttr,value); 3)创建一个文本节点 object.innerTHML=val; object.createTextNode(); B.添加节点 1.parentNode.appendChild(newNode); 说明 : 向节点子节点末尾追加一个新的子节点, 如果文档中存在新的节点 ,将其从文档中删除,重新插入新的节点 2.parentNode.insertBefore(newNode,exisingNode); 说明: 如果文档中存在新的节点 ,将其从文档中删除,重新插入新的节点 3.parentNode.replace(newNode,oldNode); 说明: 如果文档中存在新的节点 ,将其从文档中删除,重新插入新的节点 4.parentNode.removeChild(node); 说明: 找到 文档中存在 的节点,删除其子节点 ----------------------------------------------------------------------------------------------- 总结: 1.定位页面 <input type="text" name="uname" id="txt"/> document.getElementById("txt"); document.getElementsByName("uname"); document.getElementsByTagName("input"); 2.可以查看和修改属性 setAttribute(name,value); getAttribute(name); 3.空格换行的处理 使用层级关系访问节点 document.parentNode;//获取该元素的父节点 document.childNode;//获取该元素的子节点 document.firstChild;//获取该元素的第一个子节点 document.lastChild;//获取该元素的最后一个子节点 document.nextSibling;//获取该元素的下一个兄弟节点 document.previousSibling;//获取该元素的上一个兄弟节点 4.节点的操作 创建节点: createElement("节点名"); 元素前添加新的节点:insertBefore("新节点","旧节点"); 节点后拼接新节点:appendChild(新节点); 删除子节点:removeChild(节点); 克隆节点:cloneNode(deep); //false 只克隆该标签 true 克隆所有标签 替换节点:replaceChild(新,旧); 5.NODE操作表格 table对象中的属性和方法 属性:rows获取所有行 方法: insertRow(行下标); deleteRow(行下标); tableRow属性和方法 属性: cells获取所有单元格 rowIndex:获取行位置下标 方法: insertCell(单元格下标); deleteCell(单元格下标); tableCell属性和方法 属性: innerHTML:设置文本的HTML标签 innerText:设置文本内容(纯文本) className:类样式 小结: js可以修改CSS样式 1)元素对象 setAttribute("style","CSS样式"); 2)通过className绑定CSS样式
