美文网首页
Fly Jquery ( you might not need

Fly Jquery ( you might not need

作者: 南航 | 来源:发表于2016-12-03 23:49 被阅读35次

jQuery 作为一款优秀的JavaScript框架,使用 JQuery能够让你写出更加简洁易懂的代码,提高开发效率。

但是,在真正的开发过程中 我们需要考虑是否真正的需要使用一个 80+kb(压缩版 30+kb) 的代码库来作为自己的项目依赖。或者你正在开发自己的前端框架,那就更需要注意这一点了,

或许你只是需要使用几行实用的代码来方便和简化自己的书写。如此,我们何不使用简单的封装将我们仅仅需要的工具代码进行包装,或者干脆就是用原生的JavaScript,毕竟随着 ES6,ES7 的出现,JavaScript提供了更多的语法糖。新增了更多实用的方法。


Fly JQuery 使用javascript 生产单个的工具方法,需要使用时只需要简单拼装即可上手应用,每个工具方法后有详细的 JavaScript 实现。


使用方法 (使用方法基本和JQuery类似,可以进行连缀操作)

  • 将 $$ 和 Base 方法复制到自己的项目中 这两个方法是实现 fly jquery 的基础

  • 根据需要将其余的原型方法复制到自己的项目中(例如: addClass 方法)

  • 使用 $$('CssSelector') 创建一个对象, 然后像使用 jquery一样使用这个工具吧! ( 例如: $$('#idName').addClass('flyJquery') )

小技巧: ( 使用 command + f 或者 ctrl + f 本网页右上角 搜索 addClass, id 等任何关键字,)

aa.png

base


  1. 使用 $$('CssSelector') 创建一个对象,支持传递基本的 css选择器构造对象,
  2. 返回一个包含 Element List 的对象Base ( 下文一律使用 this 代替 )
  3. 可进行连缀操作
// 构造了 $$ 函数 用于初始化 fly jquery 对象
// Base 用于实现 fly jquery 的基本功能

var $$ = function (ele) {
    return new Base(ele);
}

function Base(ele) {
    //创建一个数组,来保存获取的节点和节点数组
   this.elements = [];
   if (typeof(ele) == 'string') {
       if (/^#/.test(ele)) {
           this.elements.push(document.querySelector(ele));
       } else if (/^\./.test(ele) || /^\w/.test(ele)) {
            var domList = document.querySelectorAll(ele);
            for (var domIndex = 0; domIndex < domList.length; domIndex ++) {
                this.elements.push(domList[domIndex]);
            }
       }
    } else if (typeof ele === 'object' && ele instanceof Element  && ele.nodeType === 1) {
          // 判断元素 一定为 DOM 对象
          this.elements.push(ele);
    }
}

addClass(className)


 Base.prototype.addClass = function (className) {
    for (var i = 0; i < this.elements.length; i ++) {
        if (this.elements[i].classList)
            this.elements[i].classList.add(className);
        else
            this.elements[i].className += ' ' + className;
    }
    return this;
}
  • addClass(class)
    返回一个包含有该元素的对象(可进行进一步连缀操作)

  • 使用案例

     $$('#selector').addClass('flyJquery');    // (div#selector.flyJquery) 返回 Base object
    

javascript 实现

  if (el.classList) 
     el.classList.add(className);
  else 
    el.className += ' ' + className;

removeClass(className)


 Base.prototype.removeClass = function (className) {
    for (var i = 0; i < this.elements.length; i ++) {
        if (this.elements[i].classList)
            this.elements[i].classList.remove(className);
        else
            this.elements[i].className = this.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' ');
    }
    return this;
}
  • removeClass(class)
    删除选择器中的相应的 class, 返回对象

  • 使用案例

    $$('#selector').removeClass(className);
    

javascript 实现

  if (el.classList) 
     el.classList.remove(className);
  else 
     el.className = el.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' ');

hasClass( className )


Base.prototype.hasClass = function (className) {
    if (this.elements[0].classList)
       return this.elements[0].classList.contains(className);
    else
       return new RegExp('(^| )' + className + '( |$)', 'gi').test(this.elements[0].className);
}
  • hasClass(class)

    选择器匹配多于一个的元素,那么只会判断第一个选择器是否存在这个class
    返回 boolean 值,不可进行连缀操作

  • 使用案例

     $$('#selector').hasClass(className)    // true / false
    

javascript 实现

  if (el.classList) 
     el.classList.contains(className);
  else 
     new RegExp('(^| )' + className + '( |$)', 'gi').test(el.className);

attr( name | Object(key,value) | key, value )


Base.prototype.attr = function () {
    if (arguments.length == 1 && typeof arguments[0] == 'string') {     // 返回字符串
        return this.elements[0].getAttribute(arguments[0]);
    }

    if (arguments.length == 1 && typeof arguments == 'object') {     // 返回 一个对象
        this.elements.forEach(function (item) {
            for (var obj in this[0]) {
                item.setAttribute(obj, this[0][obj]);
            }
        }, arguments);
    }

    if (arguments.length == 2) {    // 返回 一个对象
        this.elements.forEach(function(item) {
            item.setAttribute(this[0], this[1]);
        }, arguments);

    }
    return this;
}
  • attr( name | Object(key,value) | key, value )
属性 解释 返回值
name attr(name) 属性名称 返回字符串
Object(key,value) attr( {'name': 'flyJquery', 'placeholder': 'descript'} ) 名/值对 对象 返回设置属性后的对象
key, value attr('name', 'flyJquery') 两个参数 返回设置属性后的对象
  • 说明:
    选择器匹配 多于一个 的元素时
    使用 attr( attrName ) 只能获取第一个 属性的名称
    使用 attr( Object(key,value) | key, value) ) 可以 ** 设置多个元素** 的 属性

JavaScript 实现

el.getAttribute(attrName);    // 获取

el.setAttribute(attrName, attrValue);    // 设置

css( cssName | Object(key,value) | key, value )


Base.prototype.css = function () {
      if (arguments.length == 1 && typeof arguments[0] == 'string') {
        return this.elements[0].getComputedStyle[arguments[0]];             // 返回一个只读属性的字符串
    }

    if (arguments.length == 1 && typeof arguments[0] == 'object') {
        this.elements.forEach(function(item) {
            for(var obj in this[0]) {
                item.style[obj] = this[0][obj];
            }
        }, arguments);
    }

    if (arguments.length == 2) {
        this.elements.forEach(function(item) {
            item.style[this[0]] = this[1];
        }, arguments);
    }
}
  • css( cssName | Object(key,value) | key, value )
属性 解释 返回值
cssName css(cssName) 属性名称 返回字符串
Object(key,value) css( {'color': 'red', 'width': '20px'} ) 名/值对 对象 返回设置属性后的对象
key, value css('color', 'red') 两个参数 返回设置属性后的对象
  • 说明:
    选择器匹配 多于一个 的元素时
    使用 css( cssName ) 只能获取第一个 属性的名称
    使用 css( Object(key,value) | key, value) ) 可以 ** 设置多个元素** 的 属性

  • 拓展

    获取属性 getComputedStyle 只读属性 返回字符 (获取元素最终显示的样式,包括本身,外链,以及 父级 + 组级 没有被覆盖的属性),
    设置属性 style.xxx, 可读可写,能屈能伸 只能获取元素style 属性中的样式

** javascript 实现**

getComputedStyle(el)[cssName];    // 获取样式属性

el.style.color = 'red'    // 设置样式属性

html( [htmlContent] )


Base.prototype.html = function () {
    if (arguments.length == 0) {
        return this.elements[0].innerHTML;
    }
    else {
        this.elements.forEach(function(item) {
            item.innerHTML = this[0];
        }, arguments);
    }

    return this;
}
  • html( [htmlContent] )
属性 解释 返回值
html() 获取一个元素的 html 内容 返回字符串
html(htmlContent) 设置选择器中元素的内容 返回设置html后的对象
  • 说明:
    选择器匹配 多于一个 的元素时
    使用 html( ) 只能获取第一个元素 的html内容
    使用 html(htmlContent) 可以 设置多个元素 的 html 内容

javascript 实现

el.innerHTML    // 获取

el.innerHTML = 'htmlContent';    // 设置

text( [textContent] )


Base.prototype.text = function () {
    if (arguments.length == 0) {
        return this.elements[0].textContent;
    }
    else {
        this.elements.forEach(function(item) {
            item.textContent = this[0];
        }, arguments);
    }

    return this;
}
  • text( [textContent] )
属性 解释 返回值
text() 获取一个元素的 text 内容 返回字符串
text(textContent) 设置选择器中元素的内容 返回设置text后的对象
  • 说明:
    选择器匹配 多于一个 的元素时
    使用 text( ) 只能获取第一个元素 的text内容
    使用 text(textlContent) 可以 设置多个元素 的 text 内容

...... 持续更新中......

相关文章

网友评论

      本文标题:Fly Jquery ( you might not need

      本文链接:https://www.haomeiwen.com/subject/cigcmttx.html