Javaweb学习笔记——(四)——————JavaScript基础&DOM目录
    1.案例一:在末尾添加节点
 第一个:获取到ul标签
 第二部:创建li标签
 document.createElement("标签名称")方法
 第三步:创建文本
 document.createTextNode("文本内容")
 第四步:将文本添加到li标签下
 appendChild方法
 第五步:将标签添加到ul标签下
 appendChild方法
2.元素对象(element对象)
 **要操作element对象,首先必须要获取到element,
 -使用document里面相应的方法获取
 **方法
 ***获取属性里面的值
 getAttribute("属性名称")
 - var input1 = document.getElementById("inputid");
 //alert(input1.value);
 alert(input1.getAttribute("value"));
 ***设置属性的值
 input1.setAttribute("class", "haha");
 ***删除属性
 input1.removeAttribute("name");
 ** 不能删除value.'
 ***想要获取标签下面的子标签
 **使用属性 childNodes,但是这个方法是兼容性很差
 **获得标签下面的子标签下面字标签的唯一有效方法,使用getElementByTagName方法
 //获取到ul下面的所有的子标签(子元素)
 //获取ul标签
 var ulid = document.getElementById("id_ul");
 //获取ul下的子标签
 var lis = ulid.childNodes;//浏览器兼容性很差
 alert(lis);
 var lis2 = ulid.getElementByTagName("li");
 alert(lis2);
3.Node对象属性
 *nodeName
 *nodeType
 *nodeValue
 *使用dom解析html时候,需要html里面的标签,属性和文本都封装成对象
 *标签节点对应的值
 alert(span1.nodeType);  //1
 alert(span1.nodeName);  //大写的标签名称,比如SPAN
 alert(span1.nodeValue); //null
 *属性节点对应的值
 alert(id1.nodeType);  //2
 alert(id1.nodeName);  //属性的名称,大写
 alert(id1.nodeValue); //属性的值
 *文本节点对应的值
 alert(text1.nodeType);  //3
 alert(text1.nodeName);  //#text
 alert(text1.nodeValue); //文本内容
4.Node对象的属性二
 <ul>
 <li>1qqqqqqqq</li>
 <li>wwwwwww</li>
 </ul>
 *父节点
 -ul是li的父节点
 //得到li1
 var li1 = document.getElementById("li1");
 //得到ul
 var ul1 = document.getElementById("ulid");
 alert(ul1.id);
 -parentNode
 *子节点
 -li是ul的子节点
 -childNodes:得到所有的子节点,但是兼容性很差
 -firstChild:获取第一个子节点
 var ul1 = document.getElementById("ulid");
 var li11 = ul1.fristChild();
 alert(li11);
 -lastChild:获取最后一个子节点
 var li41 = ul1.lastChild();
 alert(li41);
 *同辈节点
 -li直接关系是同辈节点
 -nextSibling:获取下一个节点
 -proviousSibling:获取上一个节点
 //获取下一个节点
 var li3 = document.getElementById("li3");
 var li4 = li3.nextSibling.id;
 alert(li4);
 //获取上一个节点
 alert(li3.previousSibling.id);
5.操作dom树
 **appendChild方法
 -添加子节点到末尾
 -特点:类似于剪切的效果
 **insertBefore(newNode,oldNode)方法
 -在某个节点之前插入一个新的节点
 -两个参数
 *要插入的节点
 *在谁之前插入
 -插入一个节点,节点不存在,创建
 1.创建标签
 2.创建文本
 3.把文本添加到标签上
 -代码:
 /*
 1.获取到il3标签
 2.创建li
 3.创建文本
 4.把文本添加到li下
 5.获取到ul
 6.吧li添加到ul下(在<li id="il3">789</li>
 之前添加<li>llll</li>)
 */
 var il31 = document.getElementById("il3");
 var il5 = document.createElement("li");
 var text = document.createTextNode("llllllll");
 il5.appendChild(text);
 ulid21 = document.getElementById("ulid2");
 //insertBefore(newNode, oldNode);
 ulid21.insertBefore(il5, il31);
 **removeChild方法:删除节点
 -通过父节点删除,不能通过自己来删除自己
 -/*
    1.获取到il2标签
    2.获取父节点ul标签
    3.执行删除(通过父节点删除)
    */
 //获取li标签
 var li21 = document.getElementById("il2");
 //获取父标签
 //两种方式 
 //1.通过id获取:
 //2.通过属性parentNode获取
 var ul2 = document.getElementById("ulid2");
 //删除(通过父节点)
 ul2.removeChild(li21);
 **replaceChild(newNode, oldNode)方法;替换节点
 -两个参数
 **第一个参数:新的节点(替换成的节点)
 **第二个参数:旧的节点(被替换的节点)
 -代码
 /*
 1.创建新的节点
 2.创建新的文本
 3.添加新的文本到新的节点中
 4.获取父节点
 5.获取要被替换的节点
 6.替换节点
 */
 //1创建新的节点
 var il5 = document.createElement("li");
 //创建新的文本
 var text = document.createTextNode("tyu");
 //添加新的文本到新的节点中
 il5.appendChild(text);
 //获取父节点
 var ulid2 = document.getElementById("ulid2");
 //获取要被替换的节点
 var il2 = document.getElementById("il2");
 //replaceChild()  替换节点
 ulid2.replaceChild(il5, il2);
 }
 **cloneNode(boolean)方法:复制节点
 -代码:
 //把ul列表复制到另外一个div里面
 /*
 1.获取到ul
 2.执行复制方法 cloneNode方法复制 true
 3.把复制之后的内容放到div里面去
 ** 获取到div
 ** appendChild方法
 */
 //获取ul
 var ul = document.getElementById("ulid2");
 //复制ul,放到类似剪切板里面
 var ulcopy = ul.cloneNode(true);
 //获取到div
 var divv = document.getElementById("divv");
 //复制到divv中
 divv.appendChild(ulcopy);
 **操作dom总结(*********************)
 *获取节点使用方法
 getElementById();通过节点的id属性,查找对于节点
 getElementsByName():通过节点的name属性,查找对应节点
 getElementsByTagName():通过节点名称,查找对应节点
 *插入节点的方法
 insertBefore方法:在某个节点之前插入
 appendChlid方法:在末尾添加,剪切粘贴
 *删除节点方法
 removeChild方法:通过父节点删除
 *替换节点方法
  
 replaceChild方法:通过父节点替换
6.innerHTML属性
 *这个属性不是dom的组成部分,但是大多数浏览器都支持的属性
 第一个作用:获取文本的内容
 //获取span标签
 var span1 = document.getElementById("spanid");
 alert(span1.innerHTML);//获取标签中内容
 第二个作用:向标签里面设置内容(可以是html代码)
 **练习
 向div里面添加一个表格
 -代码:
 var str = "<table>"
 for (var i = 0; i < 10; i++) {
 str += "<tr>"
 for (var j = 0; j < 10; j++) {
 str = str + "<td>"+i+"</td>";
 }
 str += "</tr>"
 }
 str += "</table>"
 div1.innerHTML = str;
 alert(str);
7.案例二:动态显示时间
 *得到当前的时间
 var date = new Date();   //得到不少一个常规的格式
 var d1 = date.toLocaleString();  //格式化
 *需要让页面每一秒获取时间
 setInterval方法(定时器)
 *显示到页面上
 每一秒向div里面写一次时间
 *使用innerHTML属性
 *代码:
 function getD1(){
 //当前时间
 var date = new date();
 //格式化
 var d1 = date.toLocaleString();
 //获取div
 var div11 = document.getElementById("div1");
 div1.innerHTML = div11;
 }
 //动态显示时间(一秒写一次时间)
 setInterval("getD1();", 1000); 
8.案例三:全选练习
 **使用复选框上面一个属性判断是否选中
 -checked属性
 -checked=true:选中
 -checked=false:不选中
 *创建一个页面
 **复选框和按钮
 -四个复选框表示爱好
 -还有一个复选框操作(全选和全不选)
 **三个按钮:分别有事件
 -全选
 -全不选
 -反选
 //实现全选的操作
 function selAll(){
 /*
 1.获取要操作的复选框
 -使用getElementsByName()
 2.返回是数组
 -s属性 checked判断复选框是否选中
 *** checked = true; //表示选中
 *** checked = false; //表示不选中
 -遍历数组,得到的是每一个checkbox
 *把每一个checkbox属性checked=true
 */
 //获取要操作的复选框
 var loves = document.getElementsByName("love");
 //遍历数组,得到每一个复选框
 for (var i = 0; i < loves.length; i++) {
 var love1 = loves[i]; //得到每一个复选框
 //设置属性是true;
 love1.checked = true;
 }
 }
 //实现全不选操作
 function selNo(){
 //获取要操作的复选框
 var loves = document.getElementsByName("love");
 //遍历数组,得到每一个复选框
 for (var i = 0; i < loves.length; i++) {
 var love1 = loves[i]; //得到每一个复选框
 //设置属性是true;
 love1.checked = false;
 }
 }
 //实现反选操作
 function selOther(){
 //获取要操作的复选框
 var loves = document.getElementsByName("love");
 //遍历数组,得到每一个复选框
 for (var i = 0; i < loves.length; i++) {
 var love1 = loves[i]; //得到每一个复选框
 if (love1.checked) {
 love1.checked = false;
 }else{
 love1.checked = true;
 }
 }
 }
 //实现全选或者全不选操作
 function selAllNo(){
 //获取全选或者全不选的复选框
 var boxid = document.getElementById("boxid");
 if (boxid.checked) {
 var loves = document.getElementsByName("love");
 //遍历数组,得到每一个复选框
 for (var i = 0; i < loves.length; i++) {
 var love1 = loves[i]; //得到每一个复选框
 love1.checked = true;
 }
 }else{
 var loves = document.getElementsByName("love");
 //遍历数组,得到每一个复选框
 for (var i = 0; i < loves.length; i++) {
 var love1 = loves[i]; //得到每一个复选框
 love1.checked = false;
 }
 }
 }
9.案例四:下拉列表左右选择
 *下拉选择框
 <select>
 <option>11</option>
 <option>22</option>
 <option>33</option>
 <option>44</option>
 </select>
 *创建一个页面
 **两个下拉选择框
 -设置属性multiple属性
 **四个按钮,有事件
 *选择添加到右边
 步骤
 /*
 1.获取到select1中的option(getElementsByTagName():返回的是数组)
 -遍历数组,得到每一个option
 2.判断是否被选中(属性:selected,判断是否被选中)
 **selected = true:选中
 **selected = false:没有选中
 3.如果是选中,把选中的添加到右边去
 4.得到select2
 5.添加选中的部分
 **appendChild方法
 */
 *全部添加到右边
 步骤
 /*
 1.获取到第一个select下面的option对象
 2.返回数组,遍历数组
 3.得到每一个option对象
 4.得到select2
 5.添加到select2下面
 -appendChild方法
 */
 *选中添加到左边
 步骤
 /*
 1.获取到select2中的option(getElementsByTagName():返回的是数组)
 -遍历数组,得到每一个option
 2.判断是否被选中(属性:selected,判断是否被选中)
 **selected = true:选中
 **selected = false:没有选中
 3.如果是选中,把选中的添加到右边去
 4.得到select1
 5.添加选中的部分
 **appendChild方法
 */
 *全部添加到左边
 步骤
 /*
 1.获取到select2下面的option对象
 2.返回数组,遍历数组
 3.得到每一个option对象
 4.得到select1
 5.添加到select1下面
 -appendChild方法
 */
 *注意:在遍历其中获得的options数组中,因为每次遍历,数组的长度就会减少,这样,每次遍历,就会跳过部分option,所以,只有保持i的不变(i--),才可以正常遍历
10.案例五:省市联动
 *创建一个页面
 *在第一下拉框里面有一个事件:改变事件:onchange事件
 -方法add1(this.value); 表示当前改变的option里面的value值
 *创建一个二维数组,存储数据
 *每个数组第一个元素是国家名称,后面的元素是国家里面的城市
 /*
 1、遍历二维数组
 2、得到也是一个数组(国家对于关系)
 3、拿到数组中的第一个值和传递过来的值做比较
 4、如果相同,获取到第一个值后面的元素
 5、得到city的select
 6、添加过去(使用)appendChild方法
 - 创建option(三步)
 */
 /*
 由于每次都要想city里面添加option
 第二次添加,追加
 * 每次添加之前,判断一下city里面是否有option,如果有,删除
 */
11.案例六:动态生成表格
 *创建一个页面:两个输入框和一个按钮
 *代码和步骤
 var h = document.getElementById("h").value;
 var l = document.getElementById("l").value;
 var code = "<table border='1'>";
 for (var i = 0; i < h; i++) {
 code += "<tr>";
 for (var j = 0; j < l; j++) {
 code += "<td>a</td>";
 }
 code += "</tr>";
 }
 code += "</table>";
 var div11 = document.getElementById("div1");
 div1.innerHTML = code;