zoukankan      html  css  js  c++  java
  • 原生JS仿写jQuery css方法

    1.JQ方法分析:

      jquery中css方法使用  

             $().css(css属性名,属性值);
             $().css({css属性名:属性值,css属性名:属性值});

      调用者应为JQ对象 ,该方法参数有两种情况

      1. 两个参数:   第一个参数为css属性名,  第二个参数为属性值

      2.参数为一个对象,    对象的键和值 都以字符串形式传入,  { css属性名: 属性值 }

    由于JS中所有事物皆为对对象,因此   将该方法添加到 Object原型链上

    2. 两种常用的获取DOM元素的方法

      document.querySelector()
      document.querySelectorAll(')
        <ul>
            <li id="li1">1</li>
            <li>2</li>
            <li>3</li>
        </ul>
    
    <script>
        let li1=document.querySelector('#li1');
        let li=document.querySelectorAll('li');
        console.log(li1);
        console.log(li);
    </script>

    打印可以发现  

    querySelector获取的是标签元素
    而querySelectorAll 获取的是一个列表 一个伪数组

      因此 当我们为其设置样式的时候应分为两种情况

        1.  当调用对象为单一标签元素的时候,  直接设置其属性样式

         2. 当调用对象为 Nodelist 时 要将其遍历, 循环为其中的标签元素设置样式属性

    综上所述:  实现时应该可以先判断  传入的参数的个数 和 类型

         然后判断调用者是标签元素还是 Nodelist 数组

    具体代码实现如下:

        Object.prototype.css=function() {
            //判断参数个数,若为两个,则视为 css(属性, 属性值) 形式
            if (arguments.length == 2) {
                //根据调用对象,是否有length属性,判断调用者是标签元素还是Nodelist伪数组
                if(this.length){
                    //若为Nodelist伪数组则 遍历Nodelist  循环为其中的元素设置样式
                    for (let i = 0; i < this.length; i++) {
                         this[i].style[arguments[0]] = arguments[1]
                    }
                }else{
                    //若length属性不存在,name直接为this 设置style样式
                    this.style[arguments[0]] = arguments[1]
                }
            }
            //若参数只有一个,并且参数类型为object, 视为  css({属性: 属性值})
            if (arguments.length = 1 && typeof (arguments[0]) == 'object') {
                if(this.length){
                    for (let i = 0; i < this.length; i++) {
                        //通过Object.assign() 方法 设置样式
                         Object.assign(this[i].style, arguments[0])
                    }
                }else{
                    Object.assign(this.style, arguments[0])
                }
            }
            //可以使其链式调用
            return this;
        }

    使用:

    <ul>
      <li id="li1">1</li>
      <li>2</li>
      <li>3</li>
    </ul>

    <script>
      let li1=document.querySelector('#li1');
      let li=document.querySelectorAll('li');

     li.css('fontSize','50px').css({'color':'red','background':'green'})
     li1.css('fontSize','20px').css({'color':'gray','background':'yellow'})

    </script>

     显示

    --

  • 相关阅读:
    LeetCode 127. Word Ladder 单词接龙(C++/Java)
    LeetCode 681. Next Closest Time 最近时刻 / LintCode 862. 下一个最近的时间 (C++/Java)
    LeetCode 682. Baseball Game 棒球比赛(C++/Java)
    LeetCode 218. The Skyline Problem 天际线问题(C++/Java)
    小数据池,编码
    字典
    列表
    常见的数据类型
    while循环
    初始python
  • 原文地址:https://www.cnblogs.com/rookieKong/p/13417520.html
Copyright © 2011-2022 走看看