美文网首页
轻量级模拟jQuery框架封装

轻量级模拟jQuery框架封装

作者: 育儿与心理 | 来源:发表于2016-10-24 21:49 被阅读0次

jQuery 轻量级jQuery代码分析

已经实现的功能: each方法,map方法,toArray方法,get方法;

(function (window) {
        function MHQ(selector) { 
           return new MHQ.fn.init(selector);
        }        
MHQ.fn = MHQ.prototype = {            
      constructor: MHQ,            
      type: "MHQ",
      init: function (selector) { 
      // 判断传入的选择器类型,如果什么都不传,什么都不做 
               if (!selector) return this; 
               // 判断传入的是否是string类型
                if (typeof selector === "string") { 
                   // 判断是不是包含HTML标签的string类型
                    if (selector.charAt(0) === "<") {
                    } else { // 是选择器
                        [].push.apply(this, document.querySelectorAll(selector));                        return this; 
                   }
                } else if (selector.constructor.name = MHQ) { // 判断传入的是否是MHQ类型
                } else if (selector.nodeType) { // 判断是否是dom对象
                } else if (typeof selector === "function") { // 判断是否是function
                } 
             }
          };
          MHQ.fn.init.prototype = MHQ.fn; 
         // 此时使用 Itcast.fn.extend 扩展实例成员 
         // 使用 Itcast.extend 扩展静态成员
         MHQ.extend = MHQ.fn.extend = function (obj) {
            var k;
            for (k in obj) {
                this[k] = obj[k];
            }
        };
        MHQ.fn.extend({
            each: function (callback) {
                return MHQ.each(this, callback);
            },
            map: function (callback) {
                return MHQ.map(this, callback);
            }
        });
        MHQ.extend({
            each: function (obj, callback) {
                var i = 0,
                        isArray = obj.length >= 0;
                if (isArray) {
                    for (; i < obj.length; i++) {
                        if (callback.call(obj[i], i, obj[i]) === false) {
                            break;
                        }
                    }
                } else {
                    for (i in obj) {
                        if (callback.call(obj[i], i, obj[i]) === false) {
                            break;
                        }
                    }
                }
                return obj;
            },
            map: function (obj, callback) {
                var i = 0,
                        isArray = obj.length >= 0,
                        rect = [],
                        result;
                if (isArray) {
                    for (; i < obj.length; i++) {
                        result = callback(obj[i], i);
                        if (result != null) {
                            return rect.push(result);
                        }
                    }
                } else {
                    for (i in obj) {
                        result = callback(obj[i], i);
                        if (result != null) {
                            return rect.push(result);
                        }
                    }
                } 
               return rect;
            }        
});        
        // 核心功能
        MHQ.fn.extend({
            toArray: function () {
                return [].slice.call(this);
            },
            get: function (index) {
                if (index === undefined) {
                    return this.toArray();
                } else {
                    return this[index > 0 ? index : this.length + index];
                }
            }
        });
        window.MHQ = window.M = MHQ;
        // DOM模块
})(window);
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>01.轻量级jQuery框架搭建-实现基本功能</title>
    <script src="MHQ.js"></script>
</head>
<body>
    <div>1</div>
    <div>3</div>
    <div>2</div>
    <div>4</div>
</body>
<script>
    var arr = M("div").get();arr.forEach(function (v) {
        v.style.width = "500px";
        v.style.height = "50px";
        v.style.margin = "10px 0";
        v.style.border = "1px dashed #0088AA";
    });
    M( 'div' ).get( 1 ).style.backgroundColor = 'pink';
</script>
</html>
测试.png

写在最后,版本持续更改中...

相关文章

  • 轻量级模拟jQuery框架封装

    jQuery 轻量级jQuery代码分析 已经实现的功能: each方法,map方法,toArray方法,get方...

  • 轻量级模拟jQuery框架封装更新版本

    本文学习jQuery源码,封装了each、map、toArray、get以及,一些基本DOM操作方法 博客原文地址...

  • html_day5 jq运用

    1.jquery它是javascript的一个轻量级框架,对javascript进行封装,它提供了很多方便的选择器...

  • jQuery知识整理

    jQuery jQuery和DOM关系 jquery框架对象分析 加载事件 事件绑定 动画效果 jquery封装的...

  • iOS网络框架简单封装

    AFN 简单封装--iOS重构-轻量级的网络请求封装实践 YTKNetworking 网络框架封装源码解析:网络层...

  • jQuery (first day)

    // 获取dom元素、点击事件、获取文本内容 // 模拟封装JQuery (function() { functi...

  • jQuery

    1、你为什么要使用jQuery?你觉得jquery有哪些好处?1、因为jQuery是轻量级的框架,大小不到30kb...

  • SSM Spring MVC

    SpringMVC SpringMVC 实现了MVC,轻量级web框架封装了Servlet共有的行为(参数封装,视...

  • (17.04.24)jquery、原生和jq的区别、选择器(jq

    jquery:库,框架    js,别人封装成的js 官网:http://jquery.com/ 1.7 jq 1...

  • jQuery

    jQuery 能做什么? Jquery是继prototype之后又一个优秀的Javascrīpt框架。它是轻量级的...

网友评论

      本文标题:轻量级模拟jQuery框架封装

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