JavaScript基礎篇章(總結3)

前言

上篇文章總結關於Dom編程和Bom編程大致的對象和方法屬性,那麼打鐵趁熱,接着總結練習的demo.

總結之前先貼下前面兩篇js總結的博文地址

JavaScript基礎篇章(總結1) :http://blog.csdn.net/yk377657321/article/details/53930922

JavaScript基礎篇章(總結2) :http://blog.csdn.net/yk377657321/article/details/53942368

Ⅰ.練習

爲了簡單點,就以”demo**”來劃分各個demo,demo的主要介紹見html裏的title,都進行了簡單說明.

demo01


    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Bom 編程練習</title>
    </head>
    <body>
        <form>
            <table>
                <tr>
                    <td onclick="onClick()">    //觸發的方法在下面js代碼中
                        55555
                    </td>
                </tr>
            </table>
        </form>
    </body>
        <script type="text/javascript">

            /**總結:
             * Bom編程:js封裝了瀏覽器的各個對象
             * Dom編程:整個網頁 等同於 一個文檔對象模型,類似一棵樹的模型
             *
             *
             * Bom編程技術點
             *  1.window對象          JavaScript層級中的頂層對象
             *  2.navigator對象       可以獲取瀏覽器的信息
             *  3.location對象        包括當前Url有關的信息
             *  4.History對象         Url的彙總,可控制網頁的後退前進等等
             *  5.document對象        代表整個文檔頁面
             */
            document.write("<br/>");
            if(navigator.userAgent.match(/firefox/i)){          //判斷是不是火狐瀏覽器
                document.write("這是火狐");
            }

            function onClick(){                                 //點擊事件
                alert("9999999");
            }
        </script>
    </html>


demo02


    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>獲取節點對象練習</title>
    </head>
    <body>
    <form name="one">
        <label>用戶名:</label>
        <input type="text" name="username" value="請輸入用戶名" id="username"/>
        <label>密碼:</label>
        <input type="password" name="password"  id="password"/>
        <label>確認:</label>
        <input type="password" name="confirm" id="confirm"/>
        <label>愛好:</label>
        <input type="checkbox" name="like" value="eat" id="eat"/><input type="checkbox" name="like" value="sleep" id="sleep"/><input type="checkbox" name="like" value="play" id="play"/></form>
    </body>
        <script type="text/javascript">
            /**
             *    需求:
             *         1.得到所有的input元素並顯示信息(value)。
             *         2.得到所有標籤id爲"username"的結果。獲取舊value值並設置value值
             *         3. 獲取所有標籤name 爲like的元素.獲取value值.*/


            //1.
            var inputArr = document.getElementsByTagName("input");
            var str="";
            for(var i=0;i<inputArr.length;i++){
                str += ("input:"+inputArr[i] + ",");
            }
            window.alert(str);

            //2.
            var userName = document.getElementById("username");
            alert("------>" + userName.value);
            username.value = "wyk";

            //3.
            var likeArr = document.getElementsByName("like");
            var str1="";
            for(var i=0;i<likeArr.length;i++){
                str1 += "like:" + likeArr[i] + ",";
            }
            alert(str1);

        </script>
    </html>

demo03

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Dom屬性 操作練習</title>
    </head>
    <body>

        <form>
            <table border="2px" align="center" width="30%" cellpadding="5px" cellspacing="0px">
                <tr align="center">
                    <th>是否全選</td>
                    <th>
                        <input type="checkbox" name="allLike" id="allLike" onchange="return callCheckState()"/>
                    </th>
                </tr>

                <tr align="center">
                    <td>你是否喜歡吃水果?</td>
                    <td>
                        <input type="checkbox" name="like" id="like01"/>
                    </td>
                </tr>

                <tr align="center">
                    <td>你是否喜歡吃肉類?</td>
                    <td>
                        <input type="checkbox" name="like" id="like02" />
                    </td>
                </tr>

                <tr align="center">
                    <td>你是否喜歡吃飯?</td>
                    <td>
                        <input type="checkbox" name="like" id="like03" />
                    </td>
                </tr>

            </table>
        </form>

    </body>
        <script type="text/javascript">
            /**
             * 需求:
             *   1.獲取所有選中的數量。
             *   2.實現全選與全不選的效果。
             */
            function getLikes(){
                var likes = document.getElementsByName("like");
                var count = 0;
                for(var i=0;i<likes.length;i++){
                    if(likes[i].checked){
                        count++;
                    }
                }
                window.alert("----選中的數量====" + count);
            }

            function checkAll(){
                var allCheck = document.getElementById("allLike");
                var likes = document.getElementsByName("like");
                var allCk = allCheck.checked;
                for(var j=0;j<likes.length;j++){
                    likes[j].checked = allCk;
                }
            }

            //先獲取所有選中的數量,再實現全選與全不選的效果
            getLikes();
            checkAll();

            //監聽全選與全不選的按鈕的邏輯代碼
            function callCheckState(){
                checkAll();
            }
        </script>
    </html>

demo04

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Dom 查找節點</title>
    </head>
    <body>
        <table></table>
        <form id="form"><label>姓名:</label><input type="text" name="username"  value="jack" id="username"/>999999<br/></form>
    </body>

        <script type="text/javascript">

            /**
             * 下面的代碼主要是查找節點
             * Api:
             *
                     var userName = document.getElementById("username");

                     userName.parentNode.nodeName;
                     userName.childNodes;
                     userName.firstChild.nodeName;
                     userName.lastChild.nodeName;
                     userName.previousSibling.nodeName;
                     userName.nextSibling.nodeName;
                     userName.textContent
             *
             * */

            var name1 = document.getElementById("username");

            //parentNode    獲取當前元素的父節點。
            var parent = name1.parentNode;
            alert("----" + parent.nodeName);                         //這裏的parent爲空,導致程序運行未出現效果
                                                                    //原因是是上面的變量名爲name,改爲name1則正常運行
            //form
            //childNodes
            var form = document.getElementById("form");
            var child = form.childNodes;
            alert(child.length);                                // 7
            for (var i = 0; i < child.length; i++) {
                alert(child[i].nodeName);                       //
            }

            //firstChild
            var firstChild = form.firstChild;
            alert(firstChild.nodeName);                     //text
            alert("---look--->" + firstChild.textContent);
            //lastChild
            var lastChild = form.lastChild;
            alert(lastChild.nodeName);                      //text
            //nextSibling
            var nextSibling = form.nextSibling;
            alert(nextSibling.nodeName);                    //text
            //previousSibling
            var previous = form.previousSibling;            //text
            alert(previous.nodeName);

            //Note:ctrl + F5 去緩存 刷新
        </script>
    </html>

demo05

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Dom 添加節點</title>
    </head>
    <body>
        <form>
            <table border="3px" align="center" width="50%" cellpadding="5px" cellspacing="0px">
                <tr align="center" id="trPwd">
                    <td>密碼:</td>
                    <td>
                        <input type="password"/>
                    </td>
                </tr>
            </table>

        </form>

    </body>
    <script type="text/javascript">

        /**
         * 下面的代碼是插入一行 姓名的
         * @type {NodeList}
         */

        var tableTag = document.getElementsByTagName("table");
        var pwdTr = document.getElementById("trPwd");

        var tr =  document.createElement("tr");
        var td1 = document.createElement("td");
        var td2=  document.createElement("td");

        tr.setAttribute("align","center");
        tableTag[0].appendChild(tr);

        tr.appendChild(td1);
        tr.appendChild(td2);

    //----------------------------------------------------------------------------------------
        var name1 = document.createElement("input");        //這裏聲明爲 name 會有問題,視圖不顯示,改爲name1、password則沒事
        var text = document.createTextNode("姓名: ");       //創建新文本節點

        name1.setAttribute("name", "username");
        name1.setAttribute("type", "text");
        name1.setAttribute("id", "username");
        name1.setAttribute("value", "輸入用戶名");

        alert("wyk");
        td1.appendChild(text);
        td2.appendChild(name1);
    </script>
    </html>

demo06

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Dom 節點的添加、刪除</title>
    </head>
    <body>
    </body>
        <script type="text/javascript">

            //添加節點,設置屬性操作                               createElement、createTextNode方法
            var name1 = document.createElement("input");       //創建新元素節點
            var text = document.createTextNode("姓名: ");     //創建文本節點

            name1.setAttribute("type","number");            //設置元素的屬性       setAttribute方法
            name1.setAttribute("id","uName");
            name1.setAttribute("name","uName");
            name1.setAttribute("value","please input name");

            document.body.appendChild(text);                       //將節點進行掛載       appendChild方法
            document.body.appendChild(name1);

            //插入節點操作,下面br是插入在name1之前                        insertBefore 方法
            var br = document.createElement("br");
            document.body.insertBefore(br,name1);                               //插入指定位置  insertBefore方法


            //刪除指定的節點
            function removeView(){
                //Note:通過父控件刪除子控件
                document.body.removeChild(br);                              //刪除指定元素      removeChild方法
            }

             window.setTimeout(removeView,1500);        //延遲1.5秒秒。之後執行removeView這個方法

        </script>
    </html>

demo07

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>事件處理 函數</title>
    </head>
    <body>
    </body>
        <script type="text/javascript">
            var button = document.createElement("input");
            button.setAttribute("type","button");
            button.setAttribute("value","單擊一下");
            button.onclick = function () {
                 alert("我點的是美女");
            }
            document.body.appendChild(button);

    //-----------------------------------------------------------------

            var checkBox = document.createElement("input");
            var text = document.createTextNode("未選");

            checkBox.setAttribute("type","checkbox");
            checkBox.setAttribute("onchange","return checkState()");
            checkBox.setAttribute("id","checkbox");

            document.body.appendChild(checkBox);

            function checkState(){
                var checkName = document.getElementById("checkbox");
                var state = checkName.checked;
                var str = "我看到你 "
                if(state){
                    str += " 選中了";
                }else{
                    str += "取消了";
                }
                alert(str);
            }
        </script>
    </html>

demo08

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>動態增加用戶信息</title>
    </head>
    <body>
            <form>
                <table border="2px" width="50%" cellspacing="0px" cellpadding="5px" align="center" id="table01">
                    <tr align="center">
                        <th><label>選擇</label></th>
                        <th><label>編號</label></th>
                        <th><label>用戶名</label></th>
                        <th><label>密碼</label></th>
                        <th><label>年齡</label></th>
                        <th><label>住址</label></th>
                        <th><label>操作</label></th>
                    </tr>
                    <tr align="center">
                        <td><input type="checkbox" id="checkAll" onchange="return allCheck()"/></td>
                        <td colspan="7"><label id="delete_all" onclick="return execute_delete()">全部刪除</label></td>
                    </tr>
                </table>

                <hr width="50%"/>
    <!--////////////////////////////////////////////////////////////////////////////////////-->
                <!--填信息選項-->
                <table border="2px" align="center" width="50%" cellpadding="5px" cellspacing="0px">
                    <tr>
                        <td width="20%"><label>編號:</label></td>
                        <td><input type="text" id="number"/></td>

                    </tr>
                    <tr>
                        <td><label>姓名:</label></td>
                        <td><input type="text" id="name" /></td>

                    </tr>
                    <tr>
                        <td><label>密碼:</label></td>
                        <td><input type="password" id="pwd" /></td>
                    </tr>
                    <tr>
                        <td><label>年齡:</label></td>
                        <td><input type="text" id="age" /></td>

                    </tr>
                    <tr>
                        <td><label>住址:</label></td>
                        <td>
                            <select id="address">
                                <option value="北京">北京</option>
                                <option value="上海">上海</option>
                                <option value="深圳">深圳</option>
                                <option value="廣州">廣州</option>
                                <option value="惠州">惠州</option>
                            </select>
                        </td>

                    </tr>
                    <tr align="center">
                        <td colspan="7">
                            <!--return 的好處是可以讓click 在返回false時結束,不再執行,直接οnclick="check()" 即時方法中返回false,程序仍繼續執行-->
                            <!--提交按鈕的類型設置爲reset,主要作用是清空頁面的信息-->
                            <input type="reset" value="提交" onclick="return check()"/>
                            <input type="reset" value="重填" />
                        </td>
                    </tr>

                </table>
            </form>
    </body>
        <script type="text/javascript">
                function check(){                                       //method name 爲submit 不起作用

                    //這裏只做數據的增加提交
                    var number1Node = document.getElementById("number");
                    var name1Node = document.getElementById("name");
                    var pwd1Node = document.getElementById("pwd");
                    var age1Node = document.getElementById("age");
                    var address1Node = document.getElementById("address");

                    var number1 = number1Node.value;
                    var name1 = name1Node.value;
                    var pwd1 = pwd1Node.value;
                    var age1 = age1Node.value;
                    var address1 = address1Node.value;


                    if(number1=="" || name1=="" || pwd1=="" || age1==""){
                        alert("信息不完善,請確認!");
                        return false;
                    }

                    createUser(number1,name1,pwd1,age1,address1);
                  //clearCurrNews(number1Node,name1Node,pwd1Node,age1Node,address1Node);

                    alert("提交成功!");
                    return true;
                }

                function createUser(number1,name1,pwd1,age1,address1){
                    var table01 = document.getElementById("table01");

                    var tr2 = document.createElement("tr");
                    var tdSelete = document.createElement("td");
                    var tdNumber = document.createElement("td");
                    var tdUser = document.createElement("td");
                    var tdPwd = document.createElement("td");
                    var tdAge = document.createElement("td");
                    var tdAddress = document.createElement("td");
                    var tdOperate = document.createElement("td");

                    var selete = document.createElement("input");
                    var textNumber = document.createTextNode(number1);
                    var textName = document.createTextNode(name1);
                    var pwdName = document.createTextNode(pwd1);
                    var ageName = document.createTextNode(age1);
                    var addressName = document.createTextNode(address1);
                    var aperatorLabel = document.createElement("label");
                    var operatorName = document.createTextNode("刪除");


                    tr2.setAttribute("align","center");
                    selete.setAttribute("type","checkbox");
                    selete.setAttribute("name","checkState");

                    //下面進行掛載
                    table01.appendChild(tr2);

                    tr2.appendChild(tdSelete);
                    tr2.appendChild(tdNumber);
                    tr2.appendChild(tdUser);
                    tr2.appendChild(tdPwd);
                    tr2.appendChild(tdAge);
                    tr2.appendChild(tdAddress);
                    tr2.appendChild(tdOperate);

                    tdSelete.appendChild(selete);
                    tdNumber.appendChild(textNumber);
                    tdUser.appendChild(textName);
                    tdPwd.appendChild(pwdName);
                    tdAge.appendChild(ageName);
                    tdAddress.appendChild(addressName);
                    tdOperate.appendChild(aperatorLabel);

                    aperatorLabel.appendChild(operatorName);

                    aperatorLabel.onclick = delete_self;

                }

            function allCheck(){
                var delete_all = document.getElementById("checkAll");
                var checkedState = delete_all.checked;

                var checkBoxs = document.getElementsByName("checkState");
                for(var i=0;i<checkBoxs.length;i++){
                    checkBoxs[i].checked = checkedState;
                }
            }
            //執行刪除
            function execute_delete(){
               var checkBoxs = document.getElementsByName("checkState");
                var flag = true;
                if(checkBoxs.length == 0){
                    alert("沒有數據,無法刪除!");
                }
                for(var i=0;i<checkBoxs.length;i++){
                    if(checkBoxs[i].checked){
                        var tr = checkBoxs[i].parentNode.parentNode;
                        tr.parentNode.removeChild(tr);              //table 刪除tr
                        flag = false;
                    }

                    if(flag){
                        alert("未對數據進行勾選,無法刪除!");
                    }
                }

                var delete_all = document.getElementById("checkAll");
                delete_all.checked = false;

                return true;
            }

           //刪除自己
           function delete_self(){
                var tr = this.parentNode.parentNode;
                tr.parentNode.removeChild(tr);

               var childNodes = tr.childNodes;
               var number = childNodes[1];
                alert("成功刪除 編號爲"+number.textContent+"的用戶");
           }

            //提交成功後,清楚用戶填的信息//按鈕的類型設置爲reset,就不用下面這個method
            function clearCurrNews(number1Node,name1Node,pwd1Node,age1Node,address1Node){
                number1Node.value = "";
                name1Node.value = "";
                pwd1Node.value = "";
                age1Node.value = "";
                address1Node.value = "";
            }
        </script>
    </html>

demo09

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>通過js創建 生日選項</title>
    </head>
    <body>
        <form>
            <table border="2px" align="center" width="20%" cellpadding="5px" cellspacing="0px">
                <tr>
                    <td>Birthday</td>
                    <td>
                        <select id="year">
                            <option></option>
                        </select>
                        <select id="month">
                            <option></option>
                        </select>
                        <select id="day">
                            <option></option>
                        </select>
                    </td>
                </tr>
            </table>
        </form>
    </body>

        <script type="text/javascript">

            /**
             *  通過js創建年,月,日
             * 大致思路,年、月是確定的,日期會隨着年份和月份而改變
             */
            //創建年份可選項
            function myYear(){
                var year = document.getElementById("year");
                var minYear = 1950;
                var maxYear = new Date().getFullYear();

                for(var i=1950;i<=maxYear;i++){
                    var option = document.createElement("option");
                    option.innerHTML = i;
                    option.value = i;
                    year.appendChild(option);
                }
            }
            //創建月份可選項
            function myMonth(){
                var month = document.getElementById("month");
                for(var i=1;i<=12;i++){
                    var fullMonth =  (i<10)? ("0"+i) : i;
                    var option = document.createElement("option");
                    option.innerHTML = fullMonth;
                    option.value = fullMonth;
                    month.appendChild(option);
                }
                month.onchange = myDate;
            }
            //創建日期可選項
            function myDate(){
                clearDate();
                var month = document.getElementById("month").value;
                var year = document.getElementById("year").value;
                if(month ==""){
                    alert("請選擇月份!");
                    return;
                }
                if(year == ""){
                    alert("請選擇年份!");
                    return;
                }
                var dayNode = document.getElementById("day");
                //1個月至少有28天;
                for(var i=1;i<=28;i++){
                    var fullDay = i<10? "0"+i:i;
                    var option = document.createElement("option");
                    option.innerHTML = fullDay;
                    option.value = fullDay;
                    dayNode.appendChild(option);
                }

                //判斷大月、小月、閏年的情況
                var isBigMonth = month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12;
                var isSmallMonth = month == 4 || month == 6 || month == 9 || month == 11;
                var isLeapyear = (year % 4 ==0 && year % 100 != 0) || year % 400 == 0;
                var end = 28;
                if(isBigMonth){
                    end = 31;
                }else if(isSmallMonth){
                    end = 30;
                }else if(isLeapyear){
                    end = 29;
                }

                for(var i=29;i<=end;i++){
                    var endDayOption = document.createElement("option");
                    endDayOption.innerHTML = i;
                    endDayOption.value = i;
                    dayNode.appendChild(endDayOption);
                }

            }

            //刪除日期的所有可選項
            function clearDate(){
                var dayNode = document.getElementById("day");
                var days = dayNode.childNodes;
                /*for(var index in days){                     //從0到(days.length-1) 循環刪除會有問題
                    dayNode.removeChild(days[index]);
                }*/
                for(var i=days.length-1;i>0;i--){
                    dayNode.removeChild(days[i]);
                }
            }

            function getBirthDay(){
                  myYear();
                  myMonth();
            }
            getBirthDay();         //執行
        </script>
    </html>


demo10


    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>生成驗證碼的練習</title>
    </head>
    <body>
        <form>
            <table border="2dp" align="center" width="30%" cellspacing="0px" cellpadding="5px">
                <tr align="center">
                    <td>驗證碼</td>
                    <td>
                        <input type="text" id="inputCode" onchange="return checkCode()"/>
                        <span id="codeSpan"></span>
                        <a href="#" onclick="createCode()">看不清楚</a>
                        <span id="codeSpan1"></span>
                    </td>

                </tr>
            </table>
        </form>
    </body>

        <script type="text/javascript">
           function createCode(){
               var datas = ["A", "B", "C", "D", "E", "F", "G", "H", "Z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
               var code = "";
               for(var i=0;i<4;i++){
                   var number = Math.floor(Math.random() * datas.length);
                   code += datas[number];
               }

               var codeSpan = document.getElementById("codeSpan");
               codeSpan.style.color = "red";
               codeSpan.style.fontSize = "20px";
               codeSpan.style.background = "gray";
               codeSpan.style.fontWeight = 900;         //字體粗度
               codeSpan.style.fontStyle = "italic";     //斜體
               codeSpan.style.textDecoration = "line-through";  //橫線
               codeSpan.innerHTML = code;
               codeSpan.value = code;
           }

            //校驗驗證碼
            function checkCode(){
                var code = document.getElementById("codeSpan").value;
                var inputCode = document.getElementById("inputCode").value;

                var codeSpan1 = document.getElementById("codeSpan1");

                //大小寫會有問題
                var s = new String(code).toLowerCase();
                var s1 = new String(inputCode).toLowerCase();


                if(s == s1){
                    codeSpan1.innerHTML = "<img src='img/true.ico' width='20px'/>";
                    return true;
                }else{
                    codeSpan1.innerHTML = "驗證碼不正確";
                    codeSpan1.style.color = "red";
                    codeSpan1.style.fontSize = "14px";
                    return false;
                }

            }

           createCode();                //執行

        </script>
    </html>

Ⅱ.總結

Bom編程:js封裝了瀏覽器的各個對象

Dom編程:整個網頁 等同於 一個文檔對象模型,類似一棵樹的模型

Bom編程技術點:

  • 1.window對象 //JavaScript層級中的頂層對象
  • 2.navigator對象 //可以獲取瀏覽器的信息
  • 3.location對象 //包括當前Url有關的信息
  • 4.History對象 //Url的彙總,可控制網頁的後退前進等等
  • 5.document對象 //代表整個文檔頁面
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章