createElement的應用

来源:http://www.cnblogs.com/-Steven/archive/2017/11/26/7900775.html
-Advertisement-
Play Games

原生js表單生成列表實現原理 這裡用到的一些方法有 insertBefore() createElement() appendChild() removeChild() and so on~~ 效果圖如下: ...


原生js表單生成列表實現原理

這裡用到的一些方法有

insertBefore()

createElement()

appendChild()

removeChild()

and so on~~

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            section {
                width: 800px;
                height: 550px;
                padding: 80px;
                padding-bottom: 30px;
                box-sizing: border-box;
                margin: 50px auto;
                background-size: 100%;
                background-color: skyblue;
            }
            
            .head {
                background: #FFFFFF;
                height: 150px;
                padding: 50px;
                box-sizing: border-box;
                border-radius: 20px;
                margin-bottom: 30px;
            }
            
            input,
            select {
                margin: 0;
                padding: 0;
                color: #87DAF8;
                font-weight: bold;
                border: none;
                outline: none;
                background-color: transparent;
            }
            
            label {
                font-weight: bold;
                color: #000000;
                float: left;
                margin-left: 30px;
                margin-bottom: 10px;
            }
            
            label .add {
                width: 160px;
                height: 30px;
                margin-left: 40px;
                padding-left: 0;
                background-color: #2ec2fe;
                border-radius: 15px;
                color: #ffffff;
                cursor: pointer;
            }
            
            label>input {
                width: 160px;
                height: 30px;
                padding-left: 20px;
                box-sizing: border-box;
                border-radius: 15px;
                border: 1px solid #87DAF8;
            }
            
            select {
                height: 30px;
                padding-left: 20px;
                box-sizing: border-box;
                border-radius: 15px;
                border: 1px solid #87DAF8;
            }
            
            option {
                display: inline-block;
                float: left;
                padding: 5px;
            }
            
            .list {
                font: 16px/26px "微軟雅黑";
            }
            
            .list div {
                float: left;
            }
            
            .choose_box {
                padding-right: 60px;
            }
            
            .ID_box {
                padding-right: 60px;
            }
            
            .name_box {
                padding-right: 60px;
            }
            
            .age_box {
                padding-right: 60px;
            }
            
            .sex_box {
                width: 161px;
            }
            
            .list dt {
                height: 30px;
                padding-left: 20px;
                padding-top: 3px;
                border-radius: 5px;
                box-sizing: border-box;
                background-color: #3A95AE;
                margin-bottom: 5px;
                color: #FFFFFF;
            }
            
            .choose,
            .choose1 {
                display: inline-block;
                vertical-align: middle;
                width: 13px;
                height: 13px;
                border: 1px solid #87DAF8;
            }
            
            dd {
                margin: 0;
                margin-bottom: 5px;
                height: 30px;
                color: #87DAF8;
                font-weight: bold;
                padding-left: 20px;
                padding-top: 3px;
                border-radius: 5px;
                box-sizing: border-box;
                background-color: #FFFFFF;
            }
            
            dd>div:nth-of-type(1) {
                width: 85px;
            }
            
            dd>div:nth-of-type(2) {
                width: 62px;
                text-align: center;
                height:100%;
                overflow: hidden;
            }
            
            dd>div:nth-of-type(3) {
                width: 117px;
                text-align: center;
                height:100%;
                overflow: hidden;
            }
            
            dd>div:nth-of-type(4) {
                width: 77px;
                text-align: center;
                height:100%;
                overflow: hidden;
            }
            
            dd>div:nth-of-type(5) {
                width: 102px;
                text-align: center;
            }
            
            dd>div:nth-of-type(6) {
                width: 160px;
                text-align: center;
            }
            
            strong {
                padding-left: 10px;
                padding-right: 10px;
                cursor: pointer;
            }
        </style>
        <script>
            window.onload = function() {
                /*
                 * 
                 * 1:獲取姓名,年齡,性別輸入框
                 * 2:點擊添加按鈕判斷內容是否符合規範
                 * 3:點擊添加按鈕生成list列表
                 * 4:點擊選擇框按鈕事件
                 * 5:點擊上移下移按鈕事件
                 * 6:點擊刪除按鈕事件
                 * 
                 * */
                //1:獲取姓名,年齡,性別輸入框
                var user = $('#user');
                var age = $('#age');
                var add = $('#add');
                var sex = $('.sex_box')[0];
                var select1 = $('select')[0];
                var choose1 = $('.choose1')[0];
                var list = $('dl')[0]
                var choose = document.getElementsByTagName('em');
                var strong = document.getElementsByTagName('strong');
                var num = 0;
                var count = 0
                add.onclick = function() {
                    //2:點擊添加按鈕判斷內容是否符合規範
                    if(user.value == '') { //姓名框不能為空
                        alert('別鬧~~快輸入姓名')
                    } else if(age.value == '' || typeof(Number(age.value)) !== 'number') { //年齡框必須輸入數字
                        alert('自己多大心裡沒數啊?')
//                    else if(sex.value){
//                        alert('不好意思選女博士??')
                    }else {
                        //這裡面處理生成下麵的列表
                        var dd = document.createElement('dd');
                        num++; //每次生成一組數據 前面的序號加1
                        dd.innerHTML = '<div>' +
                            '<em class="choose"></em>' +
                            '</div>' +
                            '<div class="num">' + num + '</div>' +
                            '<div>' + user.value + '</div>' +
                            '<div>' + age.value + '</div>' +
                            '<div>' + sex.value + '</div>' +
                            '<div>' +
                            '<strong>↑</strong>' +
                            '<strong>↓</strong>' +
                            '<strong>X</strong>' +
                            '</div>'
                        //3:點擊添加按鈕生成list列表
                        list.appendChild(dd)
                        user.value = '';
                        age.value = '';
                        //當全選按鈕選擇後再次添加新的列表內容 就取全選按鈕的狀態
                        choose1.style.backgroundColor = '';
                        list_choose();
                        handle();
                    }
                }


                //4:點擊選擇框按鈕事件
                choose1.onclick = function() { //處理全選按鈕
                    if(!this.state){//這裡初始狀態必須是預設null。也就是假的狀態,如果設置初始狀態在點擊添加按鈕時會改變這個按鈕的狀態。
                        this.style.backgroundColor = '#FFB20F';//改變狀態
                        for(var i = 0; i < choose.length; i++) {//給所有列表項添加選中狀態
                            choose[i].style.backgroundColor = '#FFB20F';
                            choose[i].state = true;//註意改變所有列表項的狀態
                            count=choose.length;//還要註意改變計數的值
                        }
                        this.state=true;
                    }else{
                        this.style.backgroundColor = '';//同上
                        for(var i = 0; i < choose.length; i++) {//同上
                            choose[i].style.backgroundColor = '';//同上
                            choose[i].state = false;//同上
                            count=0;//同上
                        }
                        this.state=false;
                    }
                }
                function list_choose() {//處理列表項選擇框的選擇按鈕狀態
                    for(var i = 0; i < choose.length; i++) {
                        choose[i].onclick = function() {
                            if(!this.state){//這裡的this.state為預設值underfind,不可以在點擊是設置一個state的狀態,否則在點擊添加按鈕的時候會改變這個狀態
                                this.style.backgroundColor = '#FFB20F';
                                this.state = true;//改變狀態
                                count++;//計數+1
                            }else{
                                this.style.backgroundColor = '';
                                this.state = false;//改變狀態
                                count--;//計數-1
                                choose1.style.backgroundColor = '';//改變全選按鈕的狀態
                                choose1.state = false;//改變全選按鈕的狀態
                            }
                            if(count==choose.length){//當列表項全都是true的狀態時,讓全選按鈕變為選中狀態
                                choose1.style.backgroundColor = '#FFB20F';
                                choose1.state=true;
                            }
                        }
                    }
                }
                
                //5:點擊上移下移按鈕事件
                function handle(){
                    var dl = document.querySelector('dl')
                    var dd = document.querySelectorAll('dd')
                    if(strong.length>0){//這裡判斷是否存在strong。不加先判斷的話會報錯
                        for(var i=0;i<strong.length;i++){//迴圈所有的strong
                            if(i%3==0){//這裡的這個i%3==0判斷的是每個dd里的第一個strong;
                                strong[i].onclick = function(){
                                    //判斷點擊向上移動的時候如果是dl的第一個列表項就不再往上移動了
                                    if(this.parentNode.parentNode.previousElementSibling==dl.firstElementChild){
                                        alert('已經第一個了')
                                        return;
                                    } 
                                    //這裡是讓點擊的這個列表項移動到他的上一個元素前面
                                    list.insertBefore(this.parentNode.parentNode, this.parentNode.parentNode.previousElementSibling);
                                    sort();//然後重新把id序號更改過來
                                }
                            }
                            if(i%3==1){//這裡的這個i%3==1判斷的是每個dd里的第二個strong;
                                strong[i].onclick = function(){
                                    //判斷點擊向下移動的時候如果是dl的最後一個列表項就不再往下移動了
                                    if(!this.parentNode.parentNode.nextElementSibling){
                                        alert('已經最後一個了')
                                        return;
                                    }
                                    //這裡是讓點擊的這個列表項移動到他的下一個元素後面
                                    list.insertBefore(this.parentNode.parentNode, this.parentNode.parentNode.nextElementSibling.nextElementSibling);
                                    sort();//然後重新把id序號更改過來
                                }
                            }
                            if(i%3==2){//這裡的這個i%3==2判斷的是每個dd里的第三個strong;
                                strong[i].onclick = function(){ 
                                    list.removeChild(this.parentNode.parentNode);
                                    sort();
                                    var choose = document.querySelectorAll('.choose')
                                    if(this.parentNode.parentNode.firstElementChild.firstElementChild.state==true){
                                        count--;//註意這裡每刪掉一個列表項時要把選擇按鈕的計數更改-1。
                                    }
                                    if(count==choose.length){//當列表項全都是true的狀態時,讓全選按鈕變為選中狀態
                                        choose1.style.backgroundColor = '#FFB20F';
                                        choose1.state=true;
                                    }
                                    
                                }
                            }
                        }
                    }
                }
                //處理列表項上下移動的時候ID序號不變
                function sort(){
                    var num = document.querySelectorAll('.num');
                        for(var i=0;i<num.length;i++){
                            num[i].innerHTML = i+1
                        }
                }
/*
* 獲取元素集合
* */
function $(str){

    var dom;//儲存找到的元素

    if(str.charAt(0)=='.'){
        dom = document.getElementsByClassName(str.slice(1));

    }else if(str.charAt(0)=='#'){
        dom = document.getElementById(str.slice(1));
    }else{
        dom = document.getElementsByTagName(str);
    }

    return dom;//把獲取到的元素給到需要用的人
}
            }
        </script>
    </head>

    <body>
        <section>
            <div class="head">
                <form action="">
                    <label for="user">
                        姓名: <input id="user" type="text" value="" />
                        </label>
                    <label for="age">
                        年齡: <input id="age" type="number" value="" />
                    </label>
                    <label for="sex_box">
                        性別: <select class="sex_box" id="sex_box" name="sex">
                                <option value="女">女</option>
                                <option value="男">男</option>
                                <option value="女博士">女博士 </option>
                            </select>
                    </label>
                    <label for="add ">
                           <input class="add" id="add" type="button" value="添 加" />
                       </label>
                </form>
            </div>
            <dl class="list">
                <dt>
                    <div class="choose_box">
                        <span class="choose1"></span>
                        <span>全選</span>
                    </div>
                    <div class="ID_box">
                        <span>ID</span>
                    </div>
                    <div class="name_box">
                        <span>姓名</span>
                    </div>
                    <div class="age_box">
                        <span>年齡</span>
                    </div>
                    <div style="width:135px;" class="sex_box">
                        <span>性別</span>
                    </div>
                    <div class="handle_box">
                        <span>操作</span>
                    </div>
                </dt>
                <!--<dd>
                    <div>
                        <span class="choose"></span>
                    </div>
                    <div>1</div>
                    <div>多多</div>
                    <div>80</div>
                    <div>男</div>
                    <div>
                        <strong>↑</strong>
                        <strong>↓</strong>
                        <strong>X</strong>
                    </div>
                </dd>
                <dd>
                    <div>
                        <span class="choose"></span>
                    </div>
                    <div>2</div>
                    <div>強強</div>
                    <div>8</div>
                    <div>未知</div>
                    <div>
                        <strong>↑</strong>
                        <strong>↓</strong>
                        <strong>X</strong>
                    </div>
                </dd>
                <dd>
                    <div>
                        <span class="choose"></span>
                    </div>
                    <div>3</div>
                    <div>飛飛</div>
                    <div>18</div>
                    <div>男</div>
                    <div>
                        <strong>↑</strong>
                        <strong>↓</strong>
                        <strong>X</strong>
                    </div>
                </dd>-->
            </dl>
        </section>

    </body>

</html>

效果圖如下:


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、socket(單鏈接) 1、socket:應用層與TCP/IP協議族通信的中間軟體抽象層,它是一組介面。在設計模式中,Socket其實就是一個門面模式,它把複雜的TCP/IP協議族隱藏在Socket介面後面;也有人將socket說成ip+port,ip是用來標識互聯網中的一臺主機的位置,而por ...
  • 1.元組 元組和列表很相似,最大的區別就是不可以對元組進行修改,因此也可將元組稱之為不可修改的列表。 在表示上列表使用中括弧,元組使用的是小括弧。都是用逗號將元素隔開。 有一點值得註意的是,創建只有一個元素的元組時需在元素後加逗號,如tup = (2,)。所以可見元組判別元組的依據是逗號而不是小括弧 ...
  • feedparser模塊 1.簡介 feedparser是一個Python的Feed解析庫,可以處理RSS ,CDF,Atom 。使用它我們可從任何 RSS 或 Atom 訂閱源得到標題、鏈接和文章的條目了。 RSS(Really Simple Syndication,簡易信息聚合):是一種描述和同 ...
  • The GNU Compiler Collection (usually shortened to GCC) is a compiler system produced by the GNU Project supporting various programming languages. But ...
  • 1、Java常量的應用 語法:final 常量名 = 值; 舉一個簡單的例子 2、Java數組 Java中操作數組只需要四個步驟: (1)聲明數組 語法:數組類型[ ] 數組名; 或者數組類型 數組名[ ]; (2)分配空間 語法: 數組名 = new 數據類型 [ 數組長度 ]; 也可以直接合併 ...
  • 從0開始搭建自動部署環境(續) 前言 上一篇 "從0開始搭建自動部署環境" 雖然環境搭建起來了,但是配置少了一部分步驟。本來應該寫到上一篇中,但是這樣做篇幅過長了。另外,此篇會使用自動部署一個同步在Github上的Spring Boot項目為例,介紹如何使用該自動部署環境。 配置Global Too ...
  • 不管是java還是.net基礎設施必不可少。 MQ: 如果發現MQ是瓶頸。不管用的是rabbitmq還是kafka,其他的也好。作為生產者要確認超時時間、重試機制、非同步線程池。消費方要做兩件事:發現和解決。發現的主要是通過積壓閾值最快發現問題。解決的方法主要有:短期方案:增大線程數,增加伺服器。長期 ...
  • clipboard.js 可以實現純 JS 的從瀏覽器複製文本到系統剪貼板的功能。 使用方法: 1. 下載 clipboard.js,併在頁面中引入該插件。clipboard.js 下載地址: https://github.com/zenorocha/clipboard.js 2. 需要複製的目標文 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...