zoukankan      html  css  js  c++  java
  • ToDoList(原生JS)了解一下

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>ToDoList—最简单的待办事项列表</title>
        <link rel="shortcut icon" href="../img/panda.ico">
        <link rel="stylesheet" href="../CSS/reset.css">
        <link rel="stylesheet" href="../CSS/ToDoList.css">
        <link rel="stylesheet" href="../CSS/font-awesome/web-fonts-with-css/css/fontawesome-all.min.css" >
    </head>
    <body onload="count();countOut()">
    <header>
        <section>
            <form action="javascript:readInput()" id = 'form'>
                <label>ToDoList</label>
                <input placeholder="添加todo" id="todo"/>
            </form>
        </section>
    </header>
    <section id="s1">
        <h2>正在进行
            <span id="countInID">
                0
            </span>
            <ol id="in">
    
            </ol>
        </h2>
        <h2>已经完成
            <span id="countOutID">
                0
            </span>
            <ol id="out">
    
            </ol>
        </h2>
    </section>
    <footer>
                Copyright © 2018 todolist.cn
        <a href="javascript:clear()">clear</a>
    </footer>
    <script type="text/javascript" src="../JS/ToDoList.js"></script>
    </body>
    </html>
    ToDoList.html
    html{
        display: block;
    }
    head{
        display: none;
    }
    body{
        font-size: 16px;
        background: #CDCDCD;
        font-family: "Helvetica Neue",Helvetica,Arial,"Microsoft Yahei","Hiragino Sans GB","Heiti SC","WenQuanYi Micro Hei",sans-serif;
    }
    
    header{
        background: #333333;
        width: 100%;
        height: 50px;
    
    }
    section{
        padding: 0 10px;
        width: 600px;
        margin: 0 auto;
    }
    label{
        float: left;
        width: 100px;
        line-height: 50px;
        color: #DDD;
        font-size: 24px;
        cursor: pointer;
    }
    input{
        float: right;
        width: 60%;
        height: 24px;
        margin-top: 12px;
        text-indent: 10px;
        border-radius: 5px;
        box-shadow: 0 1px 0 rgba(255,255,255,0.24), 0 1px 6px rgba(0,0,0,0.45) inset;
        border: none;
    }
    footer{
        color: #666;
        font-size: 14px;
        text-align: center;
    }
    footer a{
        text-decoration: none;
        color: white;
    }
    footer a:hover{
        border: 1px solid red;
        color: red;
        font-size: 18px;
    }
    h2{
        margin-top: 20px;
        position: relative;
    }
    span{
        position: absolute;
        top: 2px;
        right: 5px;
        display: inline-block;
        padding: 0 5px;
        height: 20px;
        border-radius: 20px;
        background: #E6E6FA;
        line-height: 22px;
        text-align: center;
        color: #666;
        font-size: 14px;
    }
    ol{
        list-style-type: none;
    
    }
    ol input{
        position: absolute;
        top: 1px;
        left: 10px;
        width: 24px;
        height: 24px;
        cursor: pointer;
        margin: 3px 3px 3px 4px;
    
    }
    li{
        height: 32px;
        line-height: 32px;
        background: #fff;
        position: relative;
        margin-bottom: 10px;
        padding: 0 45px;
        border-radius: 3px;
        border-left: 5px solid #629A9C;
        box-shadow: 0 1px 2px rgba(0,0,0,0.07);
        cursor: move;
    }
    li p{
        line-height: 32px;
        margin-left: 5px;
    }
    a{
        text-decoration: none;
        color: #333333;
    }
    li a{
        position: absolute;
        top: 2px;
        right: 5px;
        display: inline-block;
        width: 30px;
        height: 30px;
        line-height: 14px;
        text-align: center;
        font-weight: bold;
        font-size: 14px;
        cursor: pointer;
    }
    li a i{
        margin: 0 auto;
        font-size: 25px;
    }
    #out input{
    
    }
    ToDoList.css
    /* http://meyerweb.com/eric/tools/css/reset/
       v2.0 | 20110126
       License: none (public domain)
    */
    
    html, body, div, span, applet, object, iframe,
    h1, h2, h3, h4, h5, h6, p, blockquote, pre,
    a, abbr, acronym, address, big, cite, code,
    del, dfn, em, img, ins, kbd, q, s, samp,
    small, strike, strong, sub, sup, tt, var,
    b, u, i, center,
    dl, dt, dd, ol, ul, li,
    fieldset, form, label, legend,
    table, caption, tbody, tfoot, thead, tr, th, td,
    article, aside, canvas, details, embed,
    figure, figcaption, footer, header, hgroup,
    menu, nav, output, ruby, section, summary,
    time, mark, audio, video {
        margin: 0;
        padding: 0;
        border: 0;
        vertical-align: baseline;
    }
    body{
        font: 14px/1.5 "Helvetica Neue",Helvetica,Arial,"Microsoft Yahei","Hiragino Sans GB","Heiti SC","WenQuanYi Micro Hei",sans-serif;
        color: #333;
        background-color: #fff;
        min-width: 1226px
    }
    reset.css
    function readInput() {
        var text = document.getElementById('todo');
        var form = document.getElementById('form');
        if(text.value.trim() ===''){
             alert('输入内容不能为空!');
             form.reset();
        }else{
            add();
            form.reset();
        }
    }
    //增加记录
    function add() {
        var textIn = document.getElementById('todo').value;
        var inLiHtml = document.getElementById('in').getElementsByTagName('li');
        if(inLiHtml.length ===0){
        //    没有记录就新增记录
            var i =0;
            document.getElementById('in').innerHTML = "<li id="in-queue-"+i+"">
    " +
                "                <input type="checkbox" onclick='check(this)' id='in"+i+"'/>
    " +
                "                <p>"+textIn+"</p>
    " +
                "                <a href="#" onclick="del(this.id)" id='ai"+i+"'>
    " +
                "                    <i class="far fa-trash-alt"></i>
    " +
                "                </a>
    " +
                "            </li>";
    
            count();
        }else {
        //    有记录就先拿到所有的li标签个数,增加一个
            var liNum = inLiHtml.length;
            var liNumP = liNum+1;
            var data = document.getElementById('in').innerHTML;
            var node = '';
            // node.setAttribute('id',"in-queue-"+liNumP);
            node = "<li id="in-queue-"+liNumP+"">
    " +
                "                <input type="checkbox" onclick='check(this)' id='in"+liNumP+"'/>
    " +
                "                <p>"+textIn+"</p>
    " +
                "                <a href="#" onclick="del(this.id)" id='ai"+liNumP+"'>
    " +
                "                    <i class="far fa-trash-alt"></i>
    " +
                "                </a>
    " +
                "            </li>";
            node += data;
            document.getElementById('in').innerHTML = node;
            count();
        }
    }
    // 统计新增记录数
    function count() {
        var countMsg = 0;
        var countRealMsg = document.getElementById('in').getElementsByTagName('li').length;
        if(countRealMsg>0){
            document.getElementById('countInID').innerText = countRealMsg;
        }else{
             document.getElementById('countInID').innerText = countMsg;
        }
    }
    // 统计完成的记录数
    function countOut() {
        var countMsg = 0;
        var countRealMsg = document.getElementById('out').getElementsByTagName('li').length;
        if(countRealMsg>0){
            document.getElementById('countOutID').innerText = countRealMsg;
        }else{
             document.getElementById('countOutID').innerText = countMsg;
        }
    }
    // 清除记录
    function clear() {
        document.getElementById('s1').innerHTML = "<h2>正在进行
    " +
            "        <span id="countInID">
    " +
            "            0
    " +
            "        </span>
    " +
            "        <ol id="in">
    " +
            "
    " +
            "        </ol>
    " +
            "    </h2>
    " +
            "    <h2>已经完成
    " +
            "        <span id="countOutID">
    " +
            "            0
    " +
            "        </span>
    " +
            "        <ol id="out">
    " +
            "
    " +
            "        </ol>
    " +
            "    </h2>";
        count();
        countOut();
    
    }
    // 删除选中记录
    function del(idNum) {
        var reID = /[a-z][a-z]/.exec(idNum);
        var newIdNum = idNum.replace(/[^0-9]/ig,"");
        var newID = '';
        if(reID =='ai' || reID=='in'){
              newID = "in-queue-"+newIdNum;
        }else if(reID =='ao' || reID == 'ou'){
              newID = "out-queue-"+newIdNum;
        }
        var data = document.getElementById(newID);
        data.parentNode.removeChild(data);
        count();
        countOut();
    }
    //分组,选中的checkbox移动到完成项
    function check(idNum) {
       var cID = idNum.id;
       var newID = cID;
       var choose = document.getElementById(cID).checked;
       if (choose===true){
           var node = '';
           var data1 = document.getElementById(cID).parentNode.innerHTML;
           var data = document.getElementById('out').innerHTML;
           var num = /d+/.exec(data1);
           var pText = document.getElementById(cID).parentNode.innerText;
           del(newID);
           node = "<li id="out-queue-"+num+"">
    " +
               "                <input type="checkbox" onclick="check(this)" id="out"+num+"" checked="checked"/>
    " +
               "                <p>"+pText+"</p>
    " +
               "                <a href="#" onclick="del(this.id)" id="ao"+num+"">
    " +
               "                    <i class="far fa-trash-alt"></i>
    " +
               "                </a>
    " +
               "            </li>";
           node += data;
           document.getElementById('out').innerHTML = node;
           count();
           countOut();
       }else if(choose===false){
           var node2 = '';
           var data12 = document.getElementById(cID).parentNode.innerHTML;
           var data2 = document.getElementById('in').innerHTML;
           var num2 = /d+/.exec(data12);
           var pText2 = document.getElementById(cID).parentNode.innerText;
           del(newID);
           node2 = "<li id="in-queue-"+num2+"">
    " +
               "                <input type="checkbox" onclick="check(this)" id="in"+num2+"" />
    " +
               "                <p>"+pText2+"</p>
    " +
               "                <a href="#" onclick="del(this.id)" id="ai"+num2+"">
    " +
               "                    <i class="far fa-trash-alt"></i>
    " +
               "                </a>
    " +
               "            </li>";
           node2 += data2;
           document.getElementById('in').innerHTML = node2;
           count();
           countOut();
       }
    }
    ToDoList.js
    1.将用户输入添加至代办项 OK
    2.可以对todolist进行分类(支持正反选) OK
    3.todilist的每一项可删除和编辑(仅可删除,p标签内内容未实现可以编辑) NO
    4.下方有clear按钮,清空所有todolist项 OK
    PS:5.未实现数据的持久化,不能将数据保存至本地
        6.语法结构待优化,基本功能实现,但是JS代码冗余
    先读我
    1.将用户输入添加至代办项 OK
    
    2.可以对todolist进行分类(支持正反选) OK  
    
    3.todilist的每一项可删除和编辑(仅可删除,p标签内内容未实现可以编辑) NO  其实用户点击区域变成input就可以编辑了
    
    4.下方有clear按钮,清空所有todolist项 OK
    
    
    
    
    
    PS:5.未实现数据的持久化,不能将数据保存至本地  /作业没要求
    
        6.语法结构待优化,基本功能实现,但是JS代码冗余  /其实可以使用jquery,原生js也可以就是写起来繁琐。
    
    
    
    1-4 85分 编辑未完成扣10分
    
    代码清晰简洁,结构紧凑,代码变量和函数命名规范,可读性好,加10分
    
    
    
    
    
     var choose = document.getElementById(cID).checked;
    
       if (choose===true){}
    
    else if(choose===false)
    
    
    
    完全可以用 if(choose);else if(!choose)代替,没见过布尔值还可以用===来匹配的........
    导师点评

    项目结构(自行引入font-awesome)

    Win a contest, win a challenge
  • 相关阅读:
    关于selenium中的三种等待方式与EC模块的知识
    re.findall用法
    链表及链表的逆置
    通过两个队列实现一个栈
    flask与Django框架的区别
    http协议与https协议
    Maven系列教材 (四)- 通过命令行创建Maven风格的Java项目
    Maven系列教材 (三)- 仓库概念,下载与配置
    Maven系列教材 (二)- 下载与配置Maven
    Maven系列教材 (一)- 什么是Maven
  • 原文地址:https://www.cnblogs.com/pandaboy1123/p/9527712.html
Copyright © 2011-2022 走看看