节点的属性:(可以使用标签--元素.出来,可以使用属性节点.出来,文本节点.点出来)
nodeType--->节点的类型:1----标签,2---属性,3---文本
nodeName--->节点的名字:标签节点---大写的标签名字,属性节点---小写的属性名字,文本节点----#text
nodeValue--->节点的值:标签节点---null,属性节点---属性值,文本节点---文本内容
获取父节点:.parentNode
获取父元素:.parentElement
获取子节点:.childNodes
获取子元素:.children
<div id="dv"> <span>这是div中的第一个span标签</span> <p>这是div中的第二个元素,第一个p标签</p> <ul id="uu"> <li>乔峰</li> <li>鹿茸</li> <li id="three">段誉</li> <li>卡卡西</li> <li>雏田</li> </ul> </div> <script src="common.js"></script> <script> // //ul标签的父级节点 // console.log(ulObj.parentNode); // //ul标签的父级元素 // console.log(ulObj.parentElement); // // console.log(ulObj.parentNode.nodeType);//标签的---1 // console.log(ulObj.parentNode.nodeName);//标签---大写的标签名字 // console.log(ulObj.parentNode.nodeValue);//标签---null
12行代码
<div id="dv">哦哦 <span>这是div中的第一个span标签</span> <p>这是div中的第二个元素,第一个p标签</p> <ul id="uu"> <li>乔峰</li> <li>鹿茸</li> <li id="three">段誉</li> <li>卡卡西</li> <li>雏田</li> </ul> </div> <script src="common.js"></script> <script> //12行代码:都是获取节点和元素的 //ul var ulObj=document.getElementById("uu"); //父级节点 console.log(ulObj.parentNode); //父级元素 console.log(ulObj.parentElement); //子节点 console.log(ulObj.childNodes); //子元素 console.log(ulObj.children); //第一个子节点 console.log(ulObj.firstChild);//------------------------IE8中是第一个子元素 //第一个子元素 console.log(ulObj.firstElementChild);//-----------------IE8中不支持 //最后一个子节点 console.log(ulObj.lastChild);//------------------------IE8中是第一个子元素 //最后一个子元素 console.log(ulObj.lastElementChild);//-----------------IE8中不支持 //某个元素的前一个兄弟节点 console.log(my$("three").previousSibling); //某个元素的前一个兄弟元素 console.log(my$("three").previousElementSibling); //某个元素的后一个兄弟节点 console.log(my$("three").nextSibling); //某个元素的后一个兄弟元素 console.log(my$("three").nextElementSibling); </script>
//总结:凡是获取节点的代码在谷歌和火狐得到的都是 相关的节点 //凡是获取元素的代码在谷歌和火狐得到的都是 相关的元素 //从子节点和兄弟节点开始,凡是获取节点的代码在IE8中得到的是元素,获取元素的相关代码,在IE8中得到的是undefined----元素的代码,iE中不支持
节点兼容代码
<script> //第一个节点和第一个元素的获取的代码在IE8中可能不支持 //element.firstChild--->谷歌和火狐获取的是第一个子几点 //element.firstChile--->IE8获取的是第一个子元素 //element.firstElementChild------>谷歌和火狐是第一个子元素,IE8不支持 //获取任意一个父级元素的第一个子级元素 function getFirstElementChild(element) { if(element.firstElementChild){//true--->支持 return element.firstElementChild; }else{ var node=element.firstChild;//第一个节点 while (node&&node.nodeType!=1){ node=node.nextSibling; } return node; } } //获取任意一个父级元素的最后一个子级元素 function getLastElementChild(element) { if(element.lastElementChild){//true--->支持 return element.lastElementChild; }else{ var node=element.lastChild;//第一个节点 while (node&&node.nodeType!=1){ node=node.previousSibling; } return node; } } console.log(getFirstElementChild(my$("uu")).innerText); console.log(getLastElementChild(my$("uu")).innerText); //最后一个节点和最后一个元素的获取的代码在IE8中可能不支持 //前一个节点和前一个元素的获取的代码在IE8中可能不支持 //后一个节点和后一个元素的获取的代码在IE8中可能不支持 </script>
元素创建的三种方式
元素创建-----为了提高用户的体验
元素创建的三种方式:
1. document.write("标签的代码及内容");
2. 对象.innerHTML="标签及代码";
3. 创建:document.createElement("标签的名字"); 添加:appendChild(元素对象)
第一种
<input type="button" value="创建一个p" id="btn"/> 小苏是一个快乐的小男孩,人家今年才38岁.好帅哦 <script src="common.js"></script> <script> //document.write("标签代码及内容"); my$("btn").onclick=function () { document.write("<p>这是一个p</p>"); }; // document.write("<p>这是一个p</p>"); //document.write()创建元素,缺陷:如果是在页面加载完毕后,此时通过这种方式创建元素,那么页面上存在的所有的内容全部被干掉 </script>
第二种
input type="button" value="创建一个p" id="btn" /> <div id="dv"></div> <script src="common.js"></script> <script> //点击按钮,在div中创建一个p标签 //第二种方式创建元素: 对象.innerHTML="标签代码及内容"; my$("btn").onclick=function () { my$("dv").innerHTML="<p>窗前明月光,疑是地上霜,举头望明月,低头思故乡</p>"; } </script>
第三种
<input type="button" value="创建p" id="btn"/> <div id="dv"></div> <script src="common.js"></script> <script> //第三种方式创建元素 //创建元素 //document.createElement("标签名字");对象 //把元素追加到父级元素中 //点击按钮,在div中创建一个p my$("btn").onclick = function () { //创建元素的 var pObj = document.createElement("p"); setInnnerText(pObj, "这是一个p"); //把创建后的子元素追加到父级元素中 my$("dv").appendChild(pObj); }; </script>
元素的增删
<input type="button" value="显示效果" id="btn"/> <input type="button" value="干掉第一个子元素" id="btn2"/> <input type="button" value="干掉所有子元素" id="btn3"/> <div id="dv"></div> <script src="common.js"></script> <script> var i=0; my$("btn").onclick=function () { i++; var obj= document.createElement("input"); obj.type="button"; obj.value="按钮"+i; //my$("dv").appendChild(obj);//追加子元素 //把新的子元素插入到第一个子元素的前面 my$("dv").insertBefore(obj,my$("dv").firstElementChild); //my$("dv").replaceChild();---(查查查查查查查查查查查查) }; my$("btn2").onclick=function () { //移除父级元素中第一个子级元素 my$("dv").removeChild(my$("dv").firstElementChild); }; my$("btn3").onclick=function () { //点击按钮删除div中所有的子级元素 //判断父级元素中有没有第一个子元素 while(my$("dv").firstElementChild){ my$("dv").removeChild(my$("dv").firstElementChild); } }; </script>
只创建一个元素
<input type="button" value="显示效果" id="btn"/> <div id="dv"></div> <script src="common.js"></script> <script> //有则删除,无则创建 //先判断有没有,有就删除,然后再创建 // my$("btn").onclick=function () { // //判断,div中有没有这个按钮,有就删除 // //判断这个按钮的子元素是否存在 // if(my$("btn2")){//如果为true就有 // my$("dv").removeChild(my$("btn2")); // } // var obj=document.createElement("input"); // obj.type="button"; // obj.value="按钮"; // obj.id="btn2"; // my$("dv").appendChild(obj); // }; my$("btn").onclick=function () { //判断,div中有没有这个按钮,有就删除 //判断这个按钮的子元素是否存在 if(!my$("btn2")){//如果为true就有 var obj=document.createElement("input"); obj.type="button"; obj.value="按钮"; obj.id="btn2"; my$("dv").appendChild(obj); } }; </script>
为元素绑定多个事件
<input type="button" value="按钮" id="btn"/> <script src="common.js"></script> <script> //为元素绑定事件(DOM):一种,但是不兼容,有两种 //1 对象.addEventListener("事件类型",事件处理函数,false);--谷歌和火狐支持,IE8不支持 //2 对象.attachEvent("有on的事件类型",事件处理函数)--谷歌不支持,火狐不支持,IE8支持 //为按钮绑定点击事件 //参数1:事件的类型---事件的名字,没有on //参数2:事件处理函数---函数(命名函数,匿名函数) //参数3:布尔类型,目前就写false-----没有为什么,不解释,明天说 //为同一个元素绑定多个相同的事件-- // my$("btn").addEventListener("click",function () { // console.log("小苏猥琐啊"); // },false); // my$("btn").addEventListener("click",function () { // console.log("小苏龌龊啊"); // },false); // my$("btn").addEventListener("click",function () { // console.log("小苏邪恶啊"); // },false); // my$("btn").addEventListener("click",function () { // console.log("小苏下流啊"); // },false); //参数1:事件类型---事件名字,有on //参数2:事件处理函数---函数(命名函数,匿名函数) // my$("btn").attachEvent("onclick",function () { // console.log("小杨好帅哦1"); // }); // // my$("btn").attachEvent("onclick",function () { // console.log("小杨好帅哦2"); // }); // // my$("btn").attachEvent("onclick",function () { // console.log("小杨好帅哦3"); // }); </script>
多个事件兼容代码
<script> //为任意元素.绑定任意的事件, 任意的元素,事件的类型,事件处理函数 function addEventListener(element,type,fn) { //判断浏览器是否支持这个方法 if(element.addEventListener){ element.addEventListener(type,fn,false); }else if(element.attachEvent){ element.attachEvent("on"+type,fn); }else{ element["on"+type]=fn; } } addEventListener(my$("btn"),"click",function () { console.log("哦1"); }); addEventListener(my$("btn"),"click",function () { console.log("哦2"); }); addEventListener(my$("btn"),"click",function () { console.log("哦3"); }); // my$("btn")["on"+"click"]=function () { // // }; // function Person(name) { // this.name=name; // this.sayHi=function () { // console.log("您好啊"); // }; // } // var per=new Person("小明"); // if(per.sayHii){//判断这个对象中有没有这个方法 // per.sayHii(); // }else{ // console.log("没有这个方法"); // } </script>