javascript:;等价于javascript:void(0);删除留言和动态表格

javascript:;和#在链接里的区别:#先跳转到页面顶部在跳转到相应链接,javascript::直接跳转到链接
取自js dom bom pink老师p46删除留言案例
以下作用域是js在es6版本之前(es6版本新增块级作用域{}如if{} for{}):
全局变量:
在全局作用域(script)(且函数外部声明的变量)内声明的变量:
在全局作用域内都能用
特殊:在函数内不使用var声明的变量也是全局变量。
局部变量(在函数内部定义var声明):
只能在函数内部使用
函数的形参也是局部变量
区别:
全局变量只能在浏览器关闭才会被销毁比较占内存
局部变量:只能在函数内部使用所在代码块执行会被初始化,代码块运行结束被销毁,省内存
以下是js dom bom pink老师的p46删除留言案例和p49动态生成表格案例删除操作对比:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        body {
            padding: 100px;
        }
        
        textarea {
            width: 200px;
            height: 100px;
            border: 1px solid pink;
            outline: none;
            resize: none;
        }
        
        ul {
            margin-top: 50px;
        }
        
        li {
            width: 300px;
            padding: 5px;
            background-color: rgb(245, 209, 243);
            color: red;
            font-size: 14px;
            margin: 15px 0;
        }
        
        li a {
            float: right;
        }
    </style>
</head>

<body>
    <textarea name="" id=""></textarea>
    <button>发布</button>
    <ul>

    </ul>
    <script>
        // 1. 获取元素
        var btn = document.querySelector('button');
        var text = document.querySelector('textarea');
        var ul = document.querySelector('ul');
        var as;
        // 2. 注册事件
        btn.onclick = function() {
                if (text.value == '') {
                    alert('您没有输入内容');
                    return false;
                } else {
                    // console.log(text.value);
                    // (1) 创建元素
                    var li = document.createElement('li');
                    // 先有li 才能赋值
                    li.innerHTML = text.value + "<a href='javascript:;'>删除</a>";
                    // (2) 添加元素
                    // ul.appendChild(li);
                    ul.insertBefore(li, ul.children[0]);
                    // (3) 删除元素  (2020-8-11)以下删除留言模块不可以放在按钮点击函数之外(猜测:li作为在函数内创建的ul新成员不可以在函数域外被调用)区分js dom pink老师 动态生成表格案例,那个案例删除操作可以放在两个for循环(分别用来创建表格的行和列)外边因为for循环里边新创建的li可以在for循环外调用因为script内为全局作用域,函数内为局部作用域,for循环内外没有区域之分(取自js零基础到精通pink老师p136全局变量和局部变量)。注:js在es6时才新增块级作用域{}(if{} for{})内为块级作用域。
                    // 另注:如script点击事件前定义var as=null随后把删除操作的as赋值之后的for{}放在点击函数之外。script全局变量和script内函数里的局部变量重名时,即便修改局部变量,也不能对全局变量造成覆盖。
                    as = document.querySelectorAll('a');
                    for (var i = 0; i < as.length; i++) {
                        as[i].onclick = function() {
                            ul.removeChild(this.parentNode);
                        }
                    }
                }
            }
            /*  var as = document.querySelectorAll('a');
             for (var i = 0; i < as.length; i++) {
                 as[i].onclick = function() {
                     // node.removeChild(child); 删除的是 li 当前a所在的li  this.parentNode;
                     ul.removeChild(this.parentNode);
                 }
             } */
    </script>
</body>

</html>

动态表格案例

// js文件等页面加载完毕再执行
window.addEventListener('load', function() {
    var arrow1 = document.querySelector('.arrow-l');
    var arrow2 = document.querySelector('.arrow-r');
    var focus = document.querySelector('.focus');
    // 鼠标经过经过显示左右按钮
    focus.addEventListener('mouseenter', function() {
        arrow1.style.display = 'block';
        arrow2.style.display = 'block';
    });
    focus.addEventListener('mouseleave', function() {
        arrow1.style.display = 'none';
        arrow2.style.display = 'none';
    });
    var ul = focus.querySelector('ul');
    var ol = focus.querySelector('.circle');
    console.log(ul.children.length);
    for (var i = 0; i < ul.children.length; i++) {
        var li = document.createElement('li');
        ol.appendChild(li);
        // 直接生成小圆圈同时绑定点击事件,如把点击事件放在生成小圆圈事件之外,点击事件的li是最后一次生成的小圆圈,只能给最后一个生成的小圆圈绑定点击事件,边生成边点击可以保证每一次新生成即所有的小圆圈都能绑定点击事件
        // 把点击小圆圈事件放在创建小圆圈事件里,类似生产一个消费一个相当于每一次新创建完立刻给新创建的小圆圈绑定点击事件(注意此时点击事件的检索范围必须局限在新创建里:表格删除留言点击事件放在创建表格里时点击事件的是td.querySelector不能是document.querySelector),
        // 如把点击事件放在创建时间外相当于全部生产完毕再启动消费
        li.addEventListener('click', function() {
            for (var i = 0; i < ol.children.length; i++) {
                ol.children[i].className = '';
            }
            this.className = 'current';
        });
    }
    /*  var lis = focus.querySelectorAll('li');
     for (var i = 0; i < lis.length; i++) {
         lis[i].addEventListener('click', function() {
             for (var i = 0; i < ol.children.length; i++) {
                 ol.children[i].className = '';
             }
             this.className = 'current';
         });
     } */
    // ol.children[0].className = 'current';
});

对比三:轮播图小圆圈创建及点击

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        @font-face {
            font-family: 'icomoon';
            src: url('fonts/icomoon.eot?tomleg');
            src: url('fonts/icomoon.eot?tomleg#iefix') format('embedded-opentype'), url('fonts/icomoon.ttf?tomleg') format('truetype'), url('fonts/icomoon.woff?tomleg') format('woff'), url('fonts/icomoon.svg?tomleg#icomoon') format('svg');
            font-weight: normal;
            font-style: normal;
            font-display: block;
        }
        
        * {
            padding: 0;
            margin: 0;
        }
        
        a {
            text-decoration: none;
        }
        
        li {
            list-style: none;
        }
        
        .focus {
            position: relative;
            width: 721px;
            height: 455px;
            background-color: pink;
        }
        
        .focus ul {
            width: 400%;
        }
        
        .focus ul li {
            float: left;
        }
        
        .arrow-l {
            display: none;
            position: absolute;
            left: 0;
            top: 270px;
            width: 20px;
            height: 20px;
            background-color: #fff;
            opacity: .5;
            font-family: 'icomoon';
        }
        
        .arrow-r {
            display: none;
            position: absolute;
            right: 0;
            top: 270px;
            width: 20px;
            height: 20px;
            background-color: #fff;
            opacity: .5;
            font-family: 'icomoon';
        }
        
        ol {
            position: absolute;
            bottom: 10px;
            left: 300px;
        }
        
        ol li {
            float: left;
            width: 10px;
            height: 10px;
            margin: 0 10px;
            border: 2px solid yellow;
            border-radius: 5px;
        }
        
        .current {
            background-color: yellow;
        }
    </style>
</head>

<body>
    <div class="focus">
        <div class="arrow-l"></div>
        <div class="arrow-r"></div>
        <ul>
            <li><img src="upload/focus.jpg" alt=""></li>
            <li><img src="upload/focus1.jpg" alt=""></li>
            <li><img src="upload/focus2.jpg" alt=""></li>
            <li><img src="upload/focus3.jpg" alt=""></li>
            <li><img src="upload/focus3.jpg" alt=""></li>
        </ul>
        <ol>

        </ol>

    </div>
    <script>
        var al = document.querySelector('.arrow-l');
        var ar = document.querySelector('.arrow-r');
        var f = document.querySelector('.focus');
        var ol = document.querySelector('ol');
        var ul = document.querySelector('ul');
        window.addEventListener('load', function() {

            f.addEventListener('mouseenter', function() {
                al.style.display = 'block';
                ar.style.display = 'block';
            });
            console.log(ul.children.length);
            for (var i = 0; i < ul.children.length; i++) {
                // createElement调用者只能是document
                var li = document.createElement('li');
                ol.appendChild(li);
                // 小圆圈点击事件放在创建小圆圈事件内相当于生产一个消费一个
                li.addEventListener('click', function() {
                    for (var i = 0; i < ul.children.length; i++) {
                        ol.children[i].className = '';

                    }
                    this.className = 'current';
                });
            }
            // 由于dom文档中往往不只一个li组合,所以检索设定在ol无序列表范围
            /*   var lis = ol.querySelectorAll('li');
              for (var i = 0; i < lis.length; i++) {
                  lis[i].addEventListener('click', function() {
                      for (var i = 0; i < ul.children.length; i++) {
                          ol.children[i].className = '';

                      }
                      this.className = 'current';
                  });

              } */
            f.addEventListener('mouseleave', function() {
                al.style.display = 'none';
                ar.style.display = 'none';
            });


        });
    </script>
</body>

</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值