js(事件) d3

1.一些DOM属性

  document里的查询方法,首先getEmentById(),getEmentsByTagName(),getEmentsByName(),

分别返回带有指定ID的元素,返回包含指定标签的所有元素节点列表,返回包含带有指定类名的所有元素的节点列表。这里的Name有时候会是className。

还有一些方法html中dom属性:innerHTML-节点的文本值,这里和。value的区别,在于前者放在一般标签里,后者放在自结束标签里。还有些属性parentNode-节点的父节点,childNodes节点的子节点,兄弟节点previousSibling这个输出的是前一个兄弟节点。如果要调某个节点下的节点,只需要他的名字.方法即可,不需要document了,前提是已经从里面调出了。

练习

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Untitled Document</title>
        <link rel="stylesheet" type="text/css" href="style/css.css" />
        <script type="text/javascript">
        function myQuery(idStr,func){
             var e=document.getElementById(idStr);
              e.onclick=func;
        }    
           window.onload=function(){
               //1.查找#bj节点
               myQuery("btn01",function(){
                  var b=document.getElementById("bj");
                  alert(b.innerHTML);
              });    
              
             //2.查找所有li节点
                myQuery("btn02",function(){
                   var b=document.getElementsByTagName("li");
                   for(var i=0;i<b.length;i++){
                         var f=b[i];
                         alert(f.innerHTML);
                   }
                  //自结束标签用value,一般标签用innerHTML。
                  });    
            
                //3.查找name=gender的所有节点
                  myQuery("btn03",function(){
                      var q=document.getElementsByName("gender");
                      for(var i=0;i<q.length;i++){
                            var h=q[i];
                            alert(h.value);
                      }
                    });         
                    //4.查找#city下所有li节点
                     myQuery("btn04",function(){
                     var cityEle=document.getElementById("city");
                     var ha=cityEle.getElementsByTagName("li");
                         for(var i=0;i<ha.length;i++){
                             alert(ha[i].innerHTML);
                         }
                    });
                    //5.返回#city的所有子节点
                     myQuery("btn05",function(){
                         var cityEle=document.getElementById("city");
                         var ha=cityEle.childNodes;
                             for(var i=0;i<ha.length;i++){
                                 if(ha[i].nodeType==1){//判断是否为文本值,或者是空格,空格的属性是3.
                                 alert(ha[i].innerHTML);
                             }
                             }
                        });
                            //6.返回#phone的第一个子节点
                         myQuery("btn06",function(){
                             var cityEle=document.getElementById("phone");
                             var ha=cityEle.firstChild;
                             alert(ha.innerHTML);        
                            })
                        //7.返回#bj的父节点
                             myQuery("btn07",function(){
                             var cityEle=document.getElementById("phone");
                             var ha=cityEle.parentNode;
                                 alert(ha.innerHTML);
                                 });
                        //8.返回#android的前一个兄弟节点
                         myQuery("btn08",function(){
                         var cityEle=document.getElementById("android");
                         var ha=cityEle.previousSibling;
                         alert(ha.innerHTML);
                        });
                            //9.读取#username的value属性值
                         myQuery("btn09",function(){
                         var cityEle=document.getElementById("username");
                         alert(cityEle.value);
                        });
                            
                            //10.设置#username的value属性值
                             myQuery("btn10",function(){
                             var cityEle=document.getElementById("username");
                             cityEle.value="hah";
                                 });
                        
                            //11.返回#bj的文本值
                             myQuery("btn11",function(){
                                 var cityEle=document.getElementById("bj");
                                 alert(cityEle.innerHTML);
                                 var chid=cityEle.firstChild;
                                 alert(chid.nodeValue);
                                });
          }
        </script>
    </head>
    <body>
        <div id="total">
            <div class="inner">
                <p>
                    你喜欢哪个城市?
                </p>

                <ul id="city">
                    <li id="bj">北京</li>
                    <li>上海</li>
                    <li>东京</li>
                    <li>首尔</li>
                </ul>

                <br>
                <br>

                <p>
                    你喜欢哪款单机游戏?
                </p>

                <ul id="game">
                    <li id="rl">红警</li>
                    <li>实况</li>
                    <li>极品飞车</li>
                    <li>魔兽</li>
                </ul>

                <br />
                <br />

                <p>
                    你手机的操作系统是?
                </p>

                <ul id="phone"><li>IOS</li><li id="android">Android</li><li>Windows Phone</li></ul>
            </div>

            <div class="inner">
                gender:
                <input type="radio" name="gender" value="male"/>
                Male
                <input type="radio" name="gender" value="female"/>
                Female
                <br>
                <br>
                name:
                <input type="text" name="name" id="username" value="abcde"/>
            </div>
        </div>
        <div id="btnList">
            <div><button id="btn01">查找#bj节点</button></div>
            <div><button id="btn02">查找所有li节点</button></div>
            <div><button id="btn03">查找name=gender的所有节点</button></div>
            <div><button id="btn04">查找#city下所有li节点</button></div>
            <div><button id="btn05">返回#city的所有子节点</button></div>
            <div><button id="btn06">返回#phone的第一个子节点</button></div>
            <div><button id="btn07">返回#bj的父节点</button></div>
            <div><button id="btn08">返回#android的前一个兄弟节点</button></div>
            <div><button id="btn09">返回#username的value属性值</button></div>
            <div><button id="btn10">设置#username的value属性值</button></div>
            <div><button id="btn11">返回#bj的文本值</button></div>
        </div>
    </body>
</html>

 

由于每个不同节点对应的 nodeName nodeType nodeValue不一样,这样就可以区分了,其中空格相当于文本内容需要占决3个type,而标签只占一个,可以根据这样把他们区分达到去空格的作用。在上面的第五个查询中用到了。在上面的方法我把一类作用的,封装成一个方法,这样就可以解决很多重复繁琐的问题,类似于java的类与实例的关系。

 

!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
    /*

     功能需求:
         ①全选按钮checkedAllBtn:点击后所有爱好都选中
         ②全不选按钮checkedNoBtn:点击后所有爱好都不选中
         ③反选按钮checkedRevBtn:点击后所有爱好选中状态反转
         ④提交按钮sendBtn:点击后依次弹出选中内容
     */
     function haha(Str,func){
         var a=    document.getElementById(Str);
        a.onclick=func;
    }
    window.onload = function() {
        var items = document.getElementsByName("items");
        
     haha("checkedAllBtn",function() {    
    //由于每个方法都差不多,现调用了一个按钮在实现一个功能,我们可以将它封装一起,这样就比较简单,只需注意一下各个符号。
              var m=    document.getElementById("checkedAllBox");
             m.checked=true;//与checkedAllBox绑定,全选绑定他。
            //遍历四个爱好多选框
            for (var i = 0; i < items.length; i++) {
                items[i].checked = true;
                //查询所有项,令所有项都为选中状态。
            }
        });
     haha("checkedNoBtn",function() {
         var f=    document.getElementById("checkedAllBox");
         f.checked=false;//同理这是全不选
            //遍历四个爱好多选框
            for (var i = 0; i < items.length; i++) {
                items[i].checked = false;
                //查询所有项,令所有项都为不选中状态。
            }
        });
     haha("checkedRevBtn",function() {
        
            //遍历四个爱好多选框
            for (var i = 0; i < items.length; i++) {
                items[i].checked = !items[i].checked;
                //也可以对每个进行特殊判断,如果是true就变成false,反之。这样的话直接全部反转不判断。
            }
            var isAllchecked=true;
            for(var j=0;j<items.length;j++){
                if(!items[j].checked){
                isAllchecked=false;
                }
            }
            checkedAllBox.checked=isAllchecked;
            //这是绑定checkedAllBox选框,当存在一个为false时全选框不全选。
        });
     haha("sendBtn",function() {
            for (var i = 0; i < items.length; i++) {
                if(items[i].checked){
                    alert(items[i].value);//获取每个选中的值。
                }
            }
        });
     haha("checkedAllBox",function(){
            for (var i = 0; i < items.length; i++) {
                //当前对象,表示的是当前函数所属的对象!
                items[i].checked=this.checked;
            }
                
        });
        var checkedAllBox = document.getElementById("checkedAllBox");
        for(var i=0;i<items.length;i++){
            items[i].onclick=function(){
                var isAllchecked=true;
                for(var j=0;j<items.length;j++){
                    if(!items[j].checked){
                    isAllchecked=false;
                    }
                }
                checkedAllBox.checked=isAllchecked;
            }
        }
        //给四个多选框绑定单击事件,只要有一个多选框未被选中,则checkedAllBox多选框不被选中。
    };
</script>
</head>
<body>

    <form method="post" action="">
        你爱好的运动是:<input type="checkbox"  id="checkedAllBox"/>全选/全不选
        <br /> 
        <input type="checkbox" name="items" value="足球" />足球 
        <input type="checkbox" name="items" value="篮球" />篮球 
        <input type="checkbox" name="items" value="羽毛球" />羽毛球 
        <input type="checkbox" name="items" value="乒乓球" />乒乓球
        <br /> 
        <input type="button" id="checkedAllBtn" value="全 选" /> 
        <input type="button" id="checkedNoBtn" value="全不选" /> 
        <input type="button" id="checkedRevBtn" value="反 选" /> 
        <input type="button" id="sendBtn" value="提 交" />
    </form>

</body>
</html>

 

上面的html实现多选框的一些功能,全选按钮,全不选按钮,反选按钮,返回所有选择的值,开始没有将全选/全不选框进行优化,即没有全选去掉了一个元素,它还是选中的状态,后面进行了绑定和优化。这里面用了this关键字,表示当前对象,表示的是当前函数所属的对象,谁调用了他,谁就是他的this。

三.增删改  

  运用了其他的document方法,创建一个TextNode字符串,在用appendChild放入其中。注意调用方法的形式,有的是直接调用,有的需要结合父节点才可以一起使用。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Untitled Document</title>
        <link rel="stylesheet" type="text/css" href="style/css.css" />
        <script type="text/javascript">
        
            window.onload = function() {
                //1.创建一个"广州"节点,添加到#city下
                var btn=document.getElementById("btn01");
                btn.onclick=function(){
                    //获取#city节点
                    var a=document.getElementById("city");
                    var b=document.createElement("li");
                    var c=document.createTextNode("广州");
                    b.appendChild(c);
                    a.appendChild(b);    
                }
                //2.将"广州"节点插入到#bj前面
                var btn1=document.getElementById("btn02");
                btn1.onclick=function(){
                    //获取#city节点
                    var a=document.getElementById("city");
                    var b=document.createElement("li");
                    var c=document.createTextNode("广州");
                    var d=document.getElementById("bj");
                    b.appendChild(c);
                    a.insertBefore(b,d);
                }
                
                //3.使用"广州"节点替换#bj节点
                var btn3=document.getElementById("btn03");
                btn3.onclick=function(){
                    //获取#city节点
                    var a=document.getElementById("city");
                    var b=document.createElement("li");
                    var c=document.createTextNode("广州");
                    var d=document.getElementById("bj");
                    b.appendChild(c);
                    a.replaceChild(b,d);
                }
                //4.删除#bj节点
                var btn4=document.getElementById("btn04");
                btn4.onclick=function(){
                    //获取#city节点
                    var a=document.getElementById("city");
                    var d=document.getElementById("bj");
                    a.removeChild(d);
                }
                //5.读取#city内的HTML代码
                var btn5=document.getElementById("btn05");
                btn5.onclick=function(){
                    var a=document.getElementById("city");
                     alert(a.innerHTML);
                }
                //6.设置#bj内的HTML代码
                var btn6=document.getElementById("btn06");
                btn6.onclick=function(){
                    var a=document.getElementById("bj");
                    var b="aa";
                    var c=a.innerHTML;
                    alert(c);
                    c=b;
                    alert(c);
                }
            };
        </script>
        </head>
    <body>
        <div id="total">
            <div class="inner">
                <p>
                    你喜欢哪个城市?
                </p>

                <ul id="city">
                <li id="bj">北京</li>
                <li>上海</li>
                <li>东京</li>
                <li>首尔</li>
                </ul>
                
            </div>
        </div>
        <div id="btnList">
            <div><button id="btn01">创建一个"广州"节点,添加到#city下</button></div>
            <div><button id="btn02">将"广州"节点插入到#bj前面</button></div>
            <div><button id="btn03">使用"广州"节点替换#bj节点</button></div>
            <div><button id="btn04">删除#bj节点</button></div>
            <div><button id="btn05">读取#city内的HTML代码</button></div>
            <div><button id="btn06">设置#bj内的HTML代码</button></div>
        </div>
    </body>
</html>

这个代码存在几个问题还没有解决?

  1.第五个读取html代码会出现空格,和一些没有的东西,如何去掉。

  2.第六个设置html代码,只能用c=b来将b的值赋给c,而不能用setattribute进行赋值。

  3.append和append.child的区别。

 

posted on 2017-11-08 20:14  国名老公yt  阅读(593)  评论(0编辑  收藏  举报