zoukankan      html  css  js  c++  java
  • JavaScript之this

    一.错误代码示例

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>this</title>
    </head>
    <body>
        <ul>
            <li>燃烧我的卡路里</li>
            <li>拿走拿走别客气</li>
            <li>拜拜甜甜圈</li>
        </ul>
    </body>
    </html>
    <script type="text/javascript">
        //获取元素
        var li=document.getElementsByTagName('li');
        for(var i=0;i<li.length;i++){
            li[i].onclick=function(){
                // 这种方法之所以会错误,是因为for循环是在script标签中,
    而不在函数中,这意味着:没有点击即函数没有执行的时候,
    for循环已经执行完;而采用this(谁调用我我就代表谁),
    即使for循环已经执行完,但是当我们点击第一个li,就代表了要获取第一个li元素
    alert(li[i].innerHTML); } } </script>

    二.this正确使用代码示例

      1.事件调用时

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>this</title>
    </head>
    <body>
        <ul>
            <li>燃烧我的卡路里</li>
            <li>拿走拿走别客气</li>
            <li>拜拜甜甜圈</li>
        </ul>
    </body>
    </html>
    <script type="text/javascript">
        //获取元素
        var li=document.getElementsByTagName('li');
        for(var i=0;i<li.length;i++){
            li[i].onclick=function(){
                // 事件调用,this指的是时间前面的对象,例:本例中为li[i]
                alert(this.innerHTML);
            }
        }
    </script>

    点击第二个li元素效果:

    2.直接调用时

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>this</title>
    </head>
    <body>
        <ul>
            <li>燃烧我的卡路里</li>
            <li>拿走拿走别客气</li>
            <li>拜拜甜甜圈</li>
        </ul>
    </body>
    </html>
    <script type="text/javascript">
        //获取元素
        var li=document.getElementsByTagName('li');
            // 直接调用,这里点击生效是因为直接调用函数的特殊性:格式正确即可执行
            for(var j=0;j<li.length;j++){
            li[j].onclick=function(){
                onclickMe();
            }
            function onclickMe(){
                alert(this);
            }
        }
    </script>

     attention:直接调用时this代表的永远是window,因为完整的代码其实是

    window.onclickMe();
    顺便一提alert完整代码前面也是省略了window,window是最高级别

    三.this小例子
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>this的小例子</title>
        <style type="text/css">
        li{
            width: 50px;
            height: 50px;
            background:red;
            text-align: center;
            font: 30px/50px "simhei";
            float: left;
            margin-right: 5px;
            color: purple;
            border-radius: 50%;
            list-style: none;
            position: relative;
            left: 0;
            top: 0;
            transition: 0.5s;
        }
        ul{
            width: 285px;
            margin:10px auto;
        }
        .active{
            background:#fff;
            color: #000;
            border:1px solid red;
            position: relative;
            top: 100px;
        }
        </style>
        <script type="text/javascript">
        window.onload=function(){
           var li=document.getElementsByTagName('li');
    
           for(var i=0;i<li.length;i++){
            li[i].onclick=function(){
                // 这段代码之所以放着是因为,内层循环由于在函数中i会从0自加到最大值,故而前面点击后添加的样式会清除(所有下标都找到,都会被执行清除样式操作),如果把它放在事件操作之前则会失效
                for(var j=0;j<li.length;j++){
                    li[j].className='';
                }
               this.className='active';
              };
           }
        };
    </script>
    </head>
    <body>
        <ul>
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
        </ul>
    </body>
    </html>

    点击相应元素添加.active样式,其它清除样式

    
    
  • 相关阅读:
    java I/O系统之File流
    java 泛型详解
    MariaDB xtrabackup物理备份与还原
    如何解决脚本运行失败,Maven构建结果是成功的状态,与实际不符
    Fillder安装,如何解决证书无法导出
    安全自动化实施方案
    数据格式XML、JSON详解
    接口测试基础
    如何生成Junit报告
    Java连接Oracle
  • 原文地址:https://www.cnblogs.com/zjm1999/p/10230261.html
Copyright © 2011-2022 走看看