大纲:
页面中引入js
定义函数的三种方式
window对象&form对象 (BOM)
document对象
Element对象
Node对象
DOM解析XML
<!DOCTYPE html> <html> <head> <title>01_页面中如何引入javascript.html</title> <meta name="keywords" content="keyword1,keyword2,keyword3"> <meta name="description" content="this is my page"> <meta name="content-type" content="text/html; charset=UTF-8"> <!--引入外部独立的javascript文件--> <script type="text/javascript" src="javascript.js"></script> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <script type="text/javascript"> /* * 在页面中引入javascript代码:使用script标签 * * type:指定使用的脚本语言 * * language:指定使用的脚本语言 * * src:引入外部javascript文件 */ </script> <body> This is my HTML page. <br> </body> <script type="text/javascript"> /* * 在页面中,任意位置都可以引入javascript代码 * * head标签中:一般情况,引入外部独立的javascript文件 * * body标签之前: * * 获取页面元素:不能 * * 定义函数: * * 定义函数即调用: * * 函数中,包含获取页面元素:不能 * * 函数中,与页面元素无关:可以 * * 定义函数不调用:可以 * * body标签之后:可以 */ // /** * */ //1 提示框中的IE或火狐图标:标签该内容支持IE及其他浏览器 //2 如果获取对应方法,需要手动增加"()" // document.add(); //区分大小写:与Java一样。 var hero; var Hero; //变量是弱类型的:与Java不一样。 //java,定义变量时,变量的类型已经明确 // Int i; // String str; //javascript,定义变量,初始化时明确类型 var str; //每行结尾的分号可有可无:与Java不一样。 alert("xxx") //ECMAScript基本上的内容与java保持一致,少部分内容不一致。 </script> </html>
定义函数的三种方式
<!DOCTYPE html> <html> <head> <title>01_定义函数的三种方式.html</title> <meta name="keywords" content="keyword1,keyword2,keyword3"> <meta name="description" content="this is my page"> <meta name="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body> This is my HTML page. <br> </body> <script type="text/javascript"> //1 普通方式定义 /* * function 方法名(参数){ * 方法体 * } */ // function add(a,b){ // return a + b ; // } // alert(add(1,2)); //2 构造函数方式 /* * var 变量名 = new Function(参数n,方法体); * * javascript中具有一个Function类型 */ // var add = new Function('a','b','return a+b;'); // alert(add(1,3)); //3 直接量方式 /* * var 变量名 = function(参数){ * 方法体 * } */ // var add = function(a,b){ // return a+b; // } // alert(add(1,4)); </script> </html>
window对象
<!DOCTYPE html> <html> <head> <title>01_window对象.html</title> <meta name="keywords" content="keyword1,keyword2,keyword3"> <meta name="description" content="this is my page"> <meta name="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body> This is my HTML page. <br> </body> <script type="text/javascript"> //使用window对象的属性和方法时,可以省略"window." //window对象的常用方法: //alert():提示框 // alert("xxx"); //confirm():确认框 // var flag = confirm("你确认要退出吗?"); // alert(flag); //prompt():标准输入框,一般不用 var flag = prompt("请输入你的用户名:","username"); alert(flag); //open()和close() //setTimeout()和clearTimeout() //setInterval()和clearInterval() </script> </html>
form对象
<!DOCTYPE html> <html> <head> <title>02_FORM对象.html</title> <meta name="keywords" content="keyword1,keyword2,keyword3"> <meta name="description" content="this is my page"> <meta name="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body> <form id="form1" action="test1.html" method="post"> <input type="text" id="username" name="username" value="username"> <input type="text" id="password" name="password" value="password"> <input type="button" id="login" value="登录"> </form> <form id="form2" name="form2" action="test2.html" method="post"> <input type="text" id="username" name="username" value="username"> <input type="text" id="password" name="password" value="password"> <input type="button" id="login" value="登录"> </form> </body> <script type="text/javascript"> //获取form1的action属性值 //访问表单的第一种:document.forms[索引值] // //1 获取form1 // var form1 = window.document.forms[0]; // // //2 获取对应的action属性 // alert(form1.action); //获取form2的action属性值 //访问表单的第二种:document.表单名 var form2 = document.form2; alert(form2.action); </script> </html>
document对象
<!DOCTYPE html> <html> <head> <title>01_查找页面标签.html</title> <meta name="keywords" content="keyword1,keyword2,keyword3"> <meta name="description" content="this is my page"> <meta name="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body> <input type="text" id="username1" name="username" value="username"> <input type="text" id="username2" name="username" value="username"> <input type="text" id="username3" name="username" value="username"> <input type="text" id="username4" name="username" value="username"> <input type="text" id="username5" name="username" value="username"> </body> <script type="text/javascript"> //获取id="username"的标签的value属性值 //1 通过id属性获取对应标签 // var username = document.getElementById("username"); // // //2 打印value属性值 // alert(username.value); //获取name="username"的标签的value属性值 // var usernames = document.getElementsByName("username"); // // alert(usernames.length); //获取input标签的value属性值 var inputs = document.getElementsByTagName("input"); alert(inputs.length); </script> </html>
<!DOCTYPE html> <html> <head> <title>01_创建节点.html</title> <meta name="keywords" content="keyword1,keyword2,keyword3"> <meta name="description" content="this is my page"> <meta name="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body> <ul id="city"> <li id="bj" name="beijing">北京</li> <li id="sh" name="shanghai">上海</li> <li id="cq" name="chongqing">重庆</li> </ul> </body> <script type="text/javascript"> //创建<li id="tj" name="tianjin">天津</li>,添加到id="city"标签下 //1 创建<li id="tj" name="tianjin">天津</li> //1 创建元素节点<li></li> var liElement = document.createElement("li"); //2 创建文本节点"天津" var text = document.createTextNode("天津"); //3 将文本节点当作子节点,添加到li标签下 liElement.appendChild(text); //4 不能创建属性节点?Element对象 liElement.setAttribute("id","tj"); liElement.setAttribute("name","tianjin"); // document.createAttribute() //2 获取id="city"标签 var cityElement = document.getElementById("city"); //3 添加:appendChild()方法,添加到最后面 cityElement.appendChild(liElement); </script> </html>
Element对象
<!DOCTYPE html> <html> <head> <title>01_操作页面元素的属性.html</title> <meta name="keywords" content="keyword1,keyword2,keyword3"> <meta name="description" content="this is my page"> <meta name="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body> <li id="bj" name="beijing">北京</li> </body> <script type="text/javascript"> //获取北京节点的name属性值 var bjElement = document.getElementById("bj"); alert(bjElement.getAttribute("name")); //output beijing //删除北京节点的name属性 bjElement.removeAttribute("name"); alert(bjElement.getAttribute("name")); //output null //设置北京节点的name属性 bjElement.setAttribute("name","beijing"); alert(bjElement.getAttribute("name")); //output beijing </script> </html>
<!DOCTYPE html> <html> <head> <title>02_在标签查找标签.html</title> <meta name="keywords" content="keyword1,keyword2,keyword3"> <meta name="description" content="this is my page"> <meta name="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body> <ul id="city"> <li id="bj" name="beijing">北京</li> <li id="sh" name="shanghai">上海</li> <li id="cq" name="chongqing">重庆</li> </ul> <select id="edu"> <option value="博士">博士</option> <option value="硕士">硕士</option> <option value="学士">学士</option> </select> </body> <script type="text/javascript"> //获取id="city"标签下的所有子节点 // //1 获取id="city"标签 // var cityElement = document.getElementById("city"); // // //2 获取所有子节点 // var children = cityElement.childNodes; //childNodes:返回的是子节点的集合 // // alert(children.length); //获取id="edu"标签的所有子节点 //select标签,浏览器解析时,自动增加一个文本内容 // //1 id="edu"标签 // var eduElement = document.getElementById("edu"); // // //2 获取所有子节点 // var children = eduElement.childNodes; // // alert(children.length); //在标签中查找标签,唯一有效的方法:getElementsByTagName() var eduElement = document.getElementById("edu"); var options = eduElement.getElementsByTagName("option"); alert(options.length); </script> </html>
Node对象
<!DOCTYPE html> <html> <head> <title>01_节点名称、值和类型.html</title> <meta name="keywords" content="keyword1,keyword2,keyword3"> <meta name="description" content="this is my page"> <meta name="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body> <input type="text" id="username" name="username" value="username"> <p> 明天上课 </p> </body> <script type="text/javascript"> //获取元素节点的nodeName、nodeType和nodeValue // var input = document.getElementById("username"); // // alert(input.nodeName); //output input // alert(input.nodeType); //1 // alert(input.nodeValue); //null //获取文本节点的nodeName、nodeType和nodeValue // var pElement = document.getElementsByTagName("p")[0]; // // var text = pElement.childNodes[0]; // // alert(text.nodeName); //output #text // alert(text.nodeType); //output 3 // alert(text.nodeValue); //output 明天上课 //获取属性节点的nodeName、nodeType和nodeValue var input = document.getElementById("username"); var attr = input.getAttributeNode("name"); alert(attr.nodeName); //output name alert(attr.nodeType); //output 2 alert(attr.nodeValue); //output username /* * nodeName、nodeType和nodeValue * * 获取HTML页面的标签,nodeName知道是什么标签 * * 利用nodeType的值,判断获取的是什么节点 * * 获取文本节点的文本内容,利用nodeValue */ </script> </html>
<!DOCTYPE html> <html> <head> <title>02_父节点、子节点和同辈节点.html</title> <meta name="keywords" content="keyword1,keyword2,keyword3"> <meta name="description" content="this is my page"> <meta name="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body> <ul id="city"> <li id="bj" name="beijing">北京</li> <li id="sh" name="shanghai">上海</li> <li id="cq" name="chongqing">重庆</li> </ul> </body> <script type="text/javascript"> //获取上海节点的父节点 // //1 获取上海节点 // var shElement = document.getElementById("sh"); // // //2 获取上海节点父节点 // //其实parentElement和parentNode的效果是一样的,但是parentElement只支持IE // var parent = shElement.parentNode; // // //3 测试 // alert(parent.id); /* * 获取对应标签的属性值 * * 标签.属性名:有些浏览器,不支持直接访问属性 * * 标签.getAttribute(属性名):更通用 */ //获取id="city"标签的第一个子节点 // //1 获取id="city"标签 // var cityElement = document.getElementById("city"); // // //2 第一个子节点 // var bjElement = cityElement.firstChild; // // //3 测试 // alert(bjElement.getAttribute("name")); //获取id="city"标签的最后一个子节点 // //1 获取id="city"标签 // var cityElement = document.getElementById("city"); // // //2 最后一个子节点 // var cqElement = cityElement.lastChild; // // //3 测试 // alert(cqElement.getAttribute("name")); //获取id="city"标签的第二个子节点 // //1 获取id="city"标签 // var cityElement = document.getElementById("city"); // // //2 第二个子节点 // var shElement = cityElement.childNodes[1]; // // //3 测试 // alert(shElement.getAttribute("name")); //获取上海节点的上一个兄弟节点 // //1 获取上海节点 // var shElement = document.getElementById("sh"); // // //2 上一个兄弟节点 // var bjElement = shElement.previousSibling; // // alert(bjElement.getAttribute("name")); //获取上海节点的下一个兄弟节点 //1 获取上海节点 var shElement = document.getElementById("sh"); //2 上一个兄弟节点 var cqElement = shElement.nextSibling; alert(cqElement.getAttribute("name")); </script> </html>
<!DOCTYPE html> <html> <head> <title>03_检测子节点和属性.html</title> <meta name="keywords" content="keyword1,keyword2,keyword3"> <meta name="description" content="this is my page"> <meta name="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body> <input type="text" id="username" name="username" value="username"> <p> 明天上课 </p> </body> <script type="text/javascript"> //判断input标签是否含有子节点 var inputElement = document.getElementById("username"); //hasChildNodes()方法:返回值是Boolean值,false是不包含,true是包含 alert(inputElement.hasChildNodes()); // var pElement = document.getElementsByTagName("p")[0]; // // alert(pElement.hasChildNodes()); //hasAttributes():判断是否含有属性,不支持IE浏览器 </script> </html>
<!DOCTYPE html> <html> <head> <title>04_插入节点.html</title> <meta name="keywords" content="keyword1,keyword2,keyword3"> <meta name="description" content="this is my page"> <meta name="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body> <ul id="city"> <li id="bj" name="beijing">北京</li> <li id="sh" name="shanghai">上海</li> <li id="cq" name="chongqing">重庆</li> </ul> </body> <script type="text/javascript"> //创建<li id="tj" name="tianjin">天津</li>,添加到重庆标签的前面 // //1 创建<li id="tj" name="tianjin">天津</li> // //1 创建元素节点<li></li> // var liElement = document.createElement("li"); // // //2 创建文本节点"天津" // var text = document.createTextNode("天津"); // // //3 将文本节点当作子节点,添加到li标签下 // liElement.appendChild(text); // // //4 不能创建属性节点?Element对象 // liElement.setAttribute("id","tj"); // liElement.setAttribute("name","tianjin"); // // //2 获取重庆节点 // var cqElement = document.getElementById("cq"); // // //不能使用parent.appendChild(child) // // //3 获取重庆的父节点 // var parent = cqElement.parentNode; // // //4 parent.insertBefore(newChild,oldChild) // parent.insertBefore(liElement,cqElement); //创建<li id="tj" name="tianjin">天津</li>,添加到上海标签的后面 //1 创建<li id="tj" name="tianjin">天津</li> //1 创建元素节点<li></li> var liElement = document.createElement("li"); //2 创建文本节点"天津" var text = document.createTextNode("天津"); //3 将文本节点当作子节点,添加到li标签下 liElement.appendChild(text); //4 不能创建属性节点?Element对象 liElement.setAttribute("id","tj"); liElement.setAttribute("name","tianjin"); //2 获取上海节点 var shElement = document.getElementById("sh"); //3 获取上海的父节点 var parent = shElement.parentNode; //4 insertAfter()没有,只能使用insertBefore() var cqElement = shElement.nextSibling; parent.insertBefore(liElement,cqElement); </script> </html>
<!DOCTYPE html> <html> <head> <title>05_删除节点.html</title> <meta name="keywords" content="keyword1,keyword2,keyword3"> <meta name="description" content="this is my page"> <meta name="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body> <ul id="city"> <li id="bj" name="beijing">北京</li> <li id="sh" name="shanghai">上海</li> <li id="cq" name="chongqing">重庆</li> </ul> </body> <script type="text/javascript"> //删除北京节点,parent.removeChild(child) //1 获取北京节点 var bjElement = document.getElementById("bj"); //2 获取北京节点的父节点 var parent = bjElement.parentNode; //3 删除 parent.removeChild(bjElement); </script> </html>
<!DOCTYPE html> <html> <head> <title>06_替换节点.html</title> <meta name="keywords" content="keyword1,keyword2,keyword3"> <meta name="description" content="this is my page"> <meta name="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body> <ul id="city"> <li id="bj" name="beijing">北京</li> <li id="sh" name="shanghai">上海</li> <li id="cq" name="chongqing">重庆</li> </ul> <ul id="game"> <li id="fk" name="fankong">反恐<p>精英</p></li> <li id="ms" name="moshou">魔兽</li> <li id="xj" name="xingji">星际</li> </ul> </body> <script type="text/javascript"> //当点击北京节点时,北京节点被反恐节点替换 // document.getElementById("bj").onclick = function(){ // //1 获取北京节点 // var bjElement = document.getElementById("bj"); // // //2 获取反恐节点 // var fkElement = document.getElementById("fk"); // // //3 获取北京节点的父节点 // var parent = bjElement.parentNode; // // //4 替换 // parent.replaceChild(fkElement,bjElement); // // } document.getElementById("bj").onclick = function(){ //1 获取北京节点 // var bjElement = document.getElementById("bj"); //2 获取反恐节点 var fkElement = document.getElementById("fk"); //3 获取北京节点的父节点 var parent = this.parentNode; //4 替换 parent.replaceChild(fkElement,this); } //this的用法:必须指代HTML页面中的具体元素 </script> </html>
<!DOCTYPE html> <html> <head> <title>07_复制节点.html</title> <meta name="keywords" content="keyword1,keyword2,keyword3"> <meta name="description" content="this is my page"> <meta name="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body> <button id="login">登录</button> <p> 段落 </p> </body> <script type="text/javascript"> //要求复制button按钮,追加到p标签上 //1 获取button按钮 var button = document.getElementById("login"); //2 复制button按钮 //cloneNode()方法:只复制了自身节点,接收参数:Boolean值,是否复制子节点 var copy = button.cloneNode(true); //3 获取p标签 var pElement = document.getElementsByTagName("p")[0]; //4 追加 pElement.appendChild(copy); </script> </html>
<!DOCTYPE html> <html> <head> <title>08_innerHTML属性.html</title> <meta name="keywords" content="keyword1,keyword2,keyword3"> <meta name="description" content="this is my page"> <meta name="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body> <div id="div"></div> </body> <script type="text/javascript"> //将<h1>今天</h1>,添加到div中 //第一种方式 // //1 创建<h1>今天</h1> // var h1Element = document.createElement("h1"); // var text = document.createTextNode("今天"); // h1Element.appendChild(text); // // //2 获取div // var divElement = document.getElementById("div"); // // //3 插入 // divElement.appendChild(h1Element); document.getElementById("div").innerHTML = "<h1>今天</h1>"; /* * innerHTML属性 * * 多与div和span标签 * * WEB1.0与WEB2.0的区别: * * WEB1.0:垂直门户网站(以内容为主) * * WEB2.0:社交网站(以人的关系为主) * * WEB3.0:基于移动互联网的社交网站 */ </script> </html>
DOM解析XML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>test01.html</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <script type="text/javascript" src="util.js"></script> </head> <body> <select id="province" name="province"> <option value="">请选择....</option> <option value="吉林省">吉林省</option> <option value="辽宁省">辽宁省</option> <option value="山东省">山东省</option> </select> <select id="city" name="city"> <option value="">请选择.....</option> </select> </body> <script type="text/javascript"> //select标签:所有事件 document.getElementById("province").onchange = function(){ //清空 var cityElement = document.getElementById("city"); var options = cityElement.getElementsByTagName("option"); // for(var z=1;z<options.length;z++){ // cityElement.removeChild(options[z]); // z--; // } for(var z=options.length-1;z>0;z--){ cityElement.removeChild(options[z]); } //1 页面选中的省份信息 var provinceValue = this.value; //2 创建XML解析器 var docXml = parseXML("cities.xml"); //DOM解析XML,只能使用getElementsByTagName(tagname) //3 获取所有province标签 var provinceXmlElements = docXml.getElementsByTagName("province"); //4 遍历province for(var i=0;i<provinceXmlElements.length;i++){ var provinceXmlElement = provinceXmlElements[i]; var provinceXmlValue = provinceXmlElement.getAttribute("name"); //5 对比 if(provinceValue==provinceXmlValue){ //6 获取对应所有city标签 var cityXmlElements = provinceXmlElement.getElementsByTagName("city"); //7 遍历所有city标签 for(var j=0;j<cityXmlElements.length;j++){ var cityXmlElement = cityXmlElements[j]; var cityXmlValue = cityXmlElement.firstChild.nodeValue; //8 添加 //<option value="长春">长春</option> var option = document.createElement("option"); option.setAttribute("value",cityXmlValue); var text = document.createTextNode(cityXmlValue); option.appendChild(text); cityElement.appendChild(option); } } } } </script> </html>
xml文件:
<?xml version="1.0" encoding="GB2312"?> <china> <province name="吉林省"> <city>长春</city> <city>吉林市</city> <city>四平</city> <city>松原</city> <city>通化</city> </province> <province name="辽宁省"> <city>沈阳</city> <city>大连</city> <city>鞍山</city> <city>抚顺</city> <city>铁岭</city> </province> <province name="山东省"> <city>济南</city> <city>青岛</city> <city>威海</city> <city>烟台</city> <city>潍坊</city> </province> </china>
js文件:
function parseXML(fileXmlName){ var xmlDoc; try {//Internet Explorer 创建一个空的xml文档 xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); } catch (e) { try {//Firefox, Mozilla, Opera, 创建一个空的xml文档 xmlDoc = document.implementation.createDocument("", "", null); } catch (e) { } } //关闭异步加载 xmlDoc.async = false; //加载xml文件 xmlDoc.load(fileXmlName); return xmlDoc; }