zoukankan      html  css  js  c++  java
  • getElementsByTagName

    一、getElementsByTagName就是通过标签名得到元素,得到的是页面上所有的该标签元素,得到的是数组。数组有下标,下标0开始,最后一项length-1。通过标签名获得所有标签名这个标签。类似于css中的标签选择器。选择的是一组元素。

    get        得到

    elements  元素们

    By        通过

    TagName  标签名字

    var ops = document.getElementsByTagName('p');
    console.log(ops); //获取所有p标签
    //ops.style.backgroundColor = "pink"; //错误写法,因为得到的是一个数组,只能通过下标来获取
    ops[0].style.backgroundColor = "pink";  //获取下标为0的p标签
    ops[1].style.backgroundColor = "pink"; //获取下标为1的p标签
    ops[2].style.backgroundColor = "pink";
    ops[ops.length-1].style.backgroundColor = "pink";  //获取最后一个的p标签

    既然是数组,也可通过循环批量控制

    var ops = document.getElementsByTagName('p');
    //循环给所有p标签
    for(var i = 0;i < ops.length;i++){
       ops[i].style.backgroundColor = "pink";
    }

    二、连续打点调用get

    连续get可以很疯狂,但是如果是数组,一定要加上下标。

    document.getElementsByTagName('div')[0].getElementsByTagName('p')[1].getElementsByTagName('span')[1].style.color = "red";

    表格隔行变色:

    var tr = document.getElementById('table').getElementsByTagName('tr');
    //不管个数是多少,编号都从0开始。
    for(var i = 0;i < tr.length;i+=2){
       //从0开始,每次加2,所以都是偶数
       tr[i].style.backgroundColor = "pink";
    }
    for(var i = 1;i < tr.length;i+=2){
        //从1开始,每次加2,所以都是奇数
        tr[i].style.backgroundColor = "skyblue";
    }

    三、批量添加事件监听

    var box = document.getElementsByTagName('p');
    for(var i = 0;i < box.length;i++){
         box[i].onclick = function(){
             alert(i); //循环结束后才执行到函数,所以也就变为5
        }
    }
    
    
    但是发现,对编号的影响,闭包的影响的又出现了。
    所以每个盒子点击后都是5.而不是我们想要的0,1,2,3,4。

    闭包的影响:匿名函数定义的时候,就已经记住了自己认识i,但是认识i不是表示把i的值复制一份记住。所以匿名函数执行的时候(就是事件触发的时候),i的值已经变为5了。

    解决方法1:使用IIFE关住当时定义时的作用域,点击事件发生时,执行对应的事件函数,事件函数会去找自己定义时的作用域。定义时候a已经被传递了参数,固定死了

    for(var i = 0;i < box.length;i++){
        (function(a){
            box[a].onclick = function(){
                alert(a);
            }
        })(i);
    }

    解决方法2:获取的元素,本身封装了大量的属性和方法,还能自定义一些新的属性并赋值。自定义属性在后期可以打点调用。

    for(var i = 0;i < box.length;i++){
        box[i].index = i;  //自定义属性,并且把每次循环i的值都赋值存起来,大家约定俗成叫
      index,实际上叫什么都可以
         console.log(box[i].index)
         box[i].onclick = function(){
             alert(this.index); //this关键字就代表事件源本身自己
        }
    }

    解决方式:每个元素对象添加一个自定义属性,用属性存住循环变量,在事件函数内部有一个特殊关键字,叫thisthis会指向事件源本身,它能够完全代替事件触发时的那个事件源对象。

    事件源:谁触发事件,谁就是事件源。

    四、对应和排他

    对应模型:点击第一排的p,第二排对应编号的p变色。
    //方法1:编号法,循环语句添加事件监听,给第一排所有p标签绑定点击事件
    for(var i = 0;i < box1.length;i++){
        box1[i].index = i;
        box1[i].onclick = function(){
        box2[this.index].style.backgroundColor = "red";
       }
    }

     

     

    //方法2IIFE

     for(var i = 0;i < box1.length;i++){

        (function(i){

            box1[i].onclick = function(){

             box2[i].style.backgroundColor = "red"
            }
         })(i)
    }
    //排他
    //碰到每个p的时候,就自己变红,别人都是灰色。离开p的时候,保持红色。
    var ps = document.getElementById("box1").getElementsByTagName("p");
    var biaoti = document.getElementById("biaoti");
    //事件监听只有onmouseover没有onmouseout
    //循环语句添加事件
    for (var i = 0; i < ps.length; i++) {
        //编号
        ps[i].idx = i;
        //监听
        ps[i].onmouseover = function(){
            //碰到每个p的时候,实际上是两件事儿
            //第一件事儿,让所有人(包括自己)都变灰色
            for(var j = 0 ; j < ps.length ; j++){
                ps[j].style.backgroundColor = "#ccc";
            }
            //第二件事儿,让自己变红
            this.style.backgroundColor = "red";
            //第三件事儿,让h1里面的内容变为自己的序号
            biaoti.innerHTML = this.idx;
        }
    };
  • 相关阅读:
    WIN7远程桌面连接--“发生身份验证错误。要求的函数不受支持”
    django-xadmin使用之更改菜单url
    django-xadmin使用之配置页眉页脚
    django-xadmin定制之列表页searchbar placeholder
    django-xadmin定制之分页显示数量
    Chrome无界面浏览模式与自定义插件加载问题
    Chrome开启无界面浏览模式Python+Windows环境
    django-xadmin中APScheduler的启动初始化
    处理nginx访问日志,筛选时间大于1秒的请求
    将Excel文件转为csv文件的python脚本
  • 原文地址:https://www.cnblogs.com/smivico/p/7797725.html
Copyright © 2011-2022 走看看