简单模拟JQ链式编程核心

简单模拟JQ链式编程核心

  1. 在myJq.js中
(function () {
//将$注册在window上
    var $ = window.$ = window.jQuery = function (selector) {
        return new Elements(findDoms(selector));
    };
    //核心方法
    function Elements(doms) {
        for (var i = 0, d; d = doms[i++];) {
            this.push(d);
        }
    }
    //暴露原型,提供扩展
    $.fn = Elements.prototype = {
        length: 0,
        push: Array.prototype.push,
        each: function (callback) {
            for (var i = 0; dom = this[i]; i++) {
                //使用call将回调函数,传给dom
                callback.call(dom, i, dom);
            }
            //链式编程,最后都返回本身
            return this;
        }
    };

    //简单的选择器封装
    function findDoms(selector) {
        var index = selector.charAt(0);

        if (index == '#') {
        // 需要数组,此处需要用数组返回
            return [document.getElementById(selector.substr(1))];
        }
        if (index == '.') {
            return document.getElementsByClassName(selector.substr(1));
        }

        return document.getElementsByTagName(selector);
    }
})();
  1. 在页面html中
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>解析jq</title>
    <script src="myJq.js"></script>
</head>
<body>
<div class="d1">1</div>
<div class="d1">6</div>
<div class="d2">2</div>
<div class="d3" id="test">3</div>
<div class="d4">4</div>
<div class="d5">5</div>
<script>
//通过原型扩展css
    $.fn.css = function (css, value) {
        if (arguments.length == 2) {
            return this.each(function (i, dom) {
                dom.style[css] = value;
            });
        }
        if (css instanceof String || typeof css == 'string') {
            return this[0].style[css];
        }
        return this.each(function (i, dom) {
            for (var v in css) {
                dom.style[v] = css[v];
            }
        });
    }
    //通过each实现链式编程,写法太啰嗦,上面扩展了css
    $('.d1').each(function () {
        this.style.color = 'red';
    }).each(function () {
        this.style.border = '1px solid #000';
    });
    //参照上面的css扩展
    $('#test').css('color', 'blue').css('background-color','#000');
    $('#test').css({
        color: 'blue',
        'background-color': '#000'
    });
    </script>
    </body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值