############### JS-DOM操作 ################
// DOM操作 // DOM(Document Object Model)是一套对文档的内容进行抽象和概念化的方法。 // 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。 // HTML DOM 模型被构造为对象的树。 // 根节点就是html,然后分为header和body,header里面有标签以及下面的文本,body里面有各种标签和各自的文本, // ###################### //DOM标准规定HTML文档中的每个成分都是一个节点(node): // 文档节点(document对象):代表整个文档 // 元素节点(element 对象):代表一个元素(标签) // 文本节点(text对象):代表元素(标签)中的文本 // 属性节点(attribute对象):代表一个属性,元素(标签)才有属性 // 注释是注释节点(comment对象) // ############################ // JavaScript 可以通过DOM创建动态的 HTML: // JavaScript 能够改变页面中的所有 HTML 元素 // JavaScript 能够改变页面中的所有 HTML 属性 // JavaScript 能够改变页面中的所有 CSS 样式 // JavaScript 能够对页面中的所有事件做出反应,这是最为常用的, // ################################# // 要操作元素,就要先找到元素,下面讲解如何查找元素 //直接查找 //下面的语句直接输入浏览器的console中就可以执行 document.getElementById("d1"); document.getElementsByClassName("c1"); document.getElementsByTagName("p"); //根据标签名字查找 //间接查找 var d3 = document.getElementById("d3"); d3.parentElement; /* parentElement 父节点标签元素 children 所有子标签 firstElementChild 第一个子标签元素 lastElementChild 最后一个子标签元素 nextElementSibling 下一个兄弟标签元素 previousElementSibling 上一个兄弟标签元素 */ // ############################# //节点操作 //创建节点 var imgEle=document.createElement("img"); //增加节点的属性 imgEle.src="http://image11.m1905.cn/uploadfile/s2010/0205/20100205083613178.jpg"; //两种写法一样, //获取节点 var d1Ele = document.getElementById("d1"); // 追加节点(作为最后的节点) d1Ele.appendChild(imgEle); // 把增加的节点,放到某一个节点的前面 var d1Ele2 = document.getElementById("d2"); var d1Ele3 = document.getElementById("d3"); var aEle=document.createElement("a"); d1Ele2.insertBefore(aEle,d1Ele3); aEle.innerText ="点我"; aEle.href ="http://www.baidu.com"; //设置自定义的属性 imgEle.setAttribute("ss", "ss"); //获取属性 imgEle.getAttribute("ss"); //删除属性 imgEle.removeAttribute("ss"); //innerText d1Ele2.innerText; //后面不写等于号,就是获取这个标签的所有的文本, d1Ele2.innerText="hehe"; //有等号,就是把里面设置文本,而且里面的子标签都没有了,所以要找到具体的标签修改, d1Ele2.innerHTML;//这是获取到下面的标签和文本,里面可以直接写标签, //删除标签 var d1Ele = document.getElementById("d1"); var sonEle = d1Ele.firstElementChild; d1Ele.removeChild(sonEle); //替换标签 var d1Ele = document.getElementById("d1"); var sonEle = d1Ele.firstElementChild; var aEle=document.createElement("a"); aEle.innerText ="点我"; d1Ele.replaceChild(aEle,sonEle);
############### JS-DOM操作-获取值操作 ################
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>获取值相关</title> </head> <body> <form action=""> <label>用户名 <input name="username" id="i1" type="text"> </label> <label>男 <input name="gender" value="1" type="radio"> </label> <label>女 <input name="gender" value="0" type="radio"> </label> <select name="from" id="s1"> <option value="010">北京</option> <option value="021">上海</option> <option value="023">重庆</option> <option value="022">天津</option> </select> <textarea id="t1" name="memo" cols="30" rows="10"> </textarea> </form> <script> 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); </script> </body> </html>
############### JS-DOM操作-class操作 ################
//class的操作 //获取class的值 var divs = document.getElementsByTagName("div"); //这是返回一个数组 divs[0] // 这是取值第一个 divs[0].className; //这是取classname的值, //移除一个class divs[0].classList;//这是一个数组, divs[0].classList.remove("c3"); // 对数组操作,移除一个值就简单了, //添加一个class divs[0].classList.add("c4"); //包含判断 divs[0].classList.contains("c4");//是否包含,如果包含就是返回true, //classList.toggle(cls) 存在就删除,否则添加 divs[0].classList.toggle("c4"); // ############################## //指定css操作 //可以直接通过改动div的一个style属性来改变颜色 var divs = document.getElementsByTagName("div"); divs[0].style.backgroundColor= "blue"; // 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
对应的HTML
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .c1 { width: 200px; height: 200px; border-radius: 50%; background-color: gray; } .c2 { background-color: yellow; } </style> </head> <body> <div class="c1 c2 c3" onclick="change(this);">div</div> <script> function change(ths){ ths.classList.toggle("c2");//没有添加,有就删除,就实现了一个颜色的切换,这是绑定了一个点击事件, } </script> </body> </html>
############### JS-DOM操作-绑定事件 ################
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .c1 { width: 200px; height: 200px; border-radius: 50%; background-color: gray; } .c2 { background-color: yellow; } </style> </head> <body> <div class="c1 c2 c3" onclick="change(this);">div</div> <div class="c1 c2 c3">div</div> <div class="c1 c2 c3">div</div> <div class="c1 c2 c3">div</div> <input id="i1" type="text"> <input id="start" type="button" value="开始"> <input id="stop" type="button" value="停止"> <input id="i3" type="text" value="裤子"> <input id="search" type="button" value="搜索"> <!--这种是输入框有一个默认值,点击之后默认值还在--> <!--<input id="i3" type="text" placeholder="娃娃"> placeholder,是默认输入框有一个值,点击之后,这个值还在, --> <select id="s1"> <option value="0">--请选择--</option> <option value="1">北京</option> <option value="2">上海</option> </select> <select id="s2"></select> <script> // <!--第一种方式在标签中标记onclick事件--> function change(ths) { ths.classList.toggle("c2");//没有添加,有就删除,就实现了一个颜色的切换,这是绑定了一个点击事件, } // 第二种方式,找到元素,然后绑定函数这种好一点 var divs = document.getElementsByTagName("div"); for (var i = 0; i < divs.length; i++) { divs[i].onclick = function () { this.classList.toggle("c2");//没有添加,有就删除,就实现了一个颜色的切换,这是绑定了一个点击事件, } } // 练习,需求: // 在input框中显示当前时间 // 1,获取当前时间, var t; //定义一个全局变量,定义一个全局变量就是为了方便后面的函数内部能调用, function foo() { var now = new Date(); var nowStr = now.toLocaleString(); // 2,把时间字符串填入input框中, var inputEle = document.getElementById("i1"); inputEle.value = nowStr; } //点击开始让这个时间动起来, var startButton = document.getElementById("start"); startButton.onclick = function () { // 每隔一秒执行一次 if (t === undefined) { //判断一下只有没有定时器的时候才会生成,否则不生成,避免连续点击生成多个, t = setInterval(foo, 1000); } } // 点击停止,让时间停止 var stopButton = document.getElementById("stop") stopButton.onclick = function () { clearInterval(t);//定义一个全局变量就是为了方便这个地方能停止 t = undefined;//因为上一步是清楚了定时器,但是t这个值还是存在的,所以要重置一下t的值为undefined } // 现在对输入框做一个事件, //点击之后value值消失,光标移除之后value值回来 var input3 = document.getElementById("i3"); input3.onfocus = function () { this.value = "";//this就是这个input框 } input3.onblur = function () { //如何值为空,就把值填回去,不是空的就不要再填回去了, if (!this.value) { this.value = "娃娃" } } //select联动, var data = {1: ["昌平区", "朝阳区", "海淀区"], 2: ["静安区", "闵行区", "浦东区"]}; // 给第一个select绑定事件,绑定的是onchange事件,当元素内容被改变时触发 //找到第一个select var select1 = document.getElementById("s1"); //给这个select绑定事件 select1.onchange = function () { //获取是选择的哪一个区 console.log(this.value); //把对应市的区,填入第二个框中, var areas = data[this.value]; //生成option标签, var select2 = document.getElementById("s2"); select2.innerHTML="";//把第二个select框清空, for (var i = 0; i < areas.length; i++) { var opEle = document.createElement("option"); //添加到第二个标签中 opEle.innerText = areas[i]; select2.appendChild(opEle) } } </script> </body> </html>
事件:
//事件是非常重要的,要着重理解,但是后面写的时候我们是使用的jQuery,基本不使用原生的js写 /* onclick 单击事件,点击的时候触发事件 ondblclick 双击事件 onfocus 元素获得焦点。 // 练习:输入框 onblur 元素失去焦点。 应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证. onchange 域的内容被改变。 应用场景:通常用于表单元素,当元素内容被改变时触发.(select联动) * */
############### JS ################