前端Vue: ElementUI 源码分析之dom.js样式操作的封装

栏目: JavaScript · 发布时间: 5年前

内容简介:使用 classList 是替代element.className作为空格分隔的字符串访问元素的类列表的一种方便的方法element.classsList /className 实练有助于理解哦
elementUI 中对dom样式的操作,使用了Web API接口中对element 对象的
1.classList属性/className属性/contains等属性;
复制代码

科普:

Element.classList 是一个只读属性,返回一个元素的类属性的实时DOMTokenList 集合。
复制代码

使用 classList 是替代element.className作为空格分隔的字符串访问元素的类列表的一种方便的方法

方法:

add( String [, String] )
添加指定的类值。如果这些类已经存在于元素的属性中,那么它们将被忽略。

remove( String [,String] )
删除指定的类值。

item ( Number )
按集合中的索引返回类值。

toggle ( String [, force] )
当只有一个参数时:切换 class value; 即如果类存在,则删除它并返回false,如果不存在,则添加它并返回true。
当存在第二个参数时:如果第二个参数的计算结果为true,则添加指定的类值,如果计算结果为false,则删除它

contains( String )
检查元素的类属性中是否存在指定的类值。

replace( oldClass, newClass )
用一个新类替换已有类。   
复制代码

hasClass()

/**

  判断element标签对象是否包含某一个类;
*/

     
    /* istanbul ignore next */
export function hasClass(el, cls) {
  if (!el || !cls) return false;
  if (cls.indexOf(' ') !== -1) throw new Error('className should not contain space.');
  if (el.classList) {
    return el.classList.contains(cls);
  } else {
    return (' ' + el.className + ' ').indexOf(' ' + cls + ' ') > -1;
  }
};
复制代码

addClass()

/* istanbul ignore next 
     向一个element 标签对象中添加一个类
    */
export function addClass(el, cls) {
      if (!el) return;
      var curClass = el.className;
      var classes = (cls || '').split(' ');

  for (var i = 0, j = classes.length; i < j; i++) {
    var clsName = classes[i];
    if (!clsName) continue;

    if (el.classList) {
      el.classList.add(clsName);
    } else if (!hasClass(el, clsName)) {
      curClass += ' ' + clsName;
    }
  }
  if (!el.classList) {
    el.className = curClass;
  }
};
复制代码

removeClass()

/**
     移除一个element 标签对象的class ;
    */
    /* istanbul ignore next */
export function removeClass(el, cls) {
  if (!el || !cls) return;
  var classes = cls.split(' ');
  var curClass = ' ' + el.className + ' ';

  for (var i = 0, j = classes.length; i < j; i++) {
    var clsName = classes[i];
    if (!clsName) continue;

    if (el.classList) {
      el.classList.remove(clsName);
    } else if (hasClass(el, clsName)) {
      curClass = curClass.replace(' ' + clsName + ' ', ' ');
    }
  }
  if (!el.classList) {
    el.className = trim(curClass);
  }
};
复制代码

element.classsList /className 实练有助于理解哦

前端Vue: ElementUI 源码分析之dom.js样式操作的封装
chrome console:

var dom =document.getElementById("datatable")

dom.classList

DOMTokenList(3) ["barhide-x", "p-scrollbar", "bar-y", value: "barhide-x p-scrollbar bar-y"]0: "barhide-x"1: "p-scrollbar"2: "bar-y"length: 3value: "barhide-x p-scrollbar bar-y"]
__proto__: DOMTokenList

dom.className
"barhide-x p-scrollbar bar-y"

dom.classList.remove("bar-y");

dom.classList

DOMTokenList(2) ["barhide-x", "p-scrollbar", value: "barhide-x p-scrollbar"]0: "barhide-x"1: "p-scrollbar"length: 2value: "barhide-x p-scrollbar"__proto__: DOMTokenList

dom.classList.remove("p-scrollbar");

dom.classList.remove("barhide-x");

dom.classList

DOMTokenList [value: ""]length: 0value: ""__proto__: DOMTokenList

dom.className
""
复制代码

参考


以上所述就是小编给大家介绍的《前端Vue: ElementUI 源码分析之dom.js样式操作的封装》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

赢在设计

赢在设计

[美] 洛芙迪 (Lance Loveday)、[美] 尼豪斯 (Sandra Niehaus) / 刘淼、枊靖、王卓昊 / 人民邮电出版社 / 2010-8 / 55.00

企业总是面临在网站设计和改进方面进行投资的抉择。怎样才能让有限的资金发挥出最大的效益呢?网站设计不应只是把网站做得赏心悦目,它更应该是提高经济收益和获得竞争优势的战略利器。是时候让网站发挥其潜能,以业务指标为导向来做设计决策,为提升网站收益而设计了。 作者凭借多年为众多网站做咨询工作的经验,为我们揭示了赢在设计的奥秘。它针对目前网站设计中存在的典型问题,先从宏观上探讨解决问题的战略手段,围绕......一起来看看 《赢在设计》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

随机密码生成器
随机密码生成器

多种字符组合密码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码