【JavaScript框架封装】实现一个类似于JQuery的属性框架的封装

【JavaScript框架封装】实现一个类似于JQuery的属性框架的封装

版权声明:本文为博主原创文章,未经博主允许不得转载。更多学习资料请访问我爱科技论坛:www.52tech.tech https://blog.csdn.net/m0_37981569/article/details/81123810
// 属性框架
(function (xframe) {
    // 需要参与链式访问的(必须使用prototype的方式来给对象扩充方法)
    xframe.extend({
        /**
         * 获取/设置某一个元素的属性信息
         * @return {*}
         */
        attr: function () {
            // 获取属性信息:两种格式,1. 取值模式 2.设置模式
            var args = arguments;
            if (args.length === 0) {
                // 没有参数的话,就直接返回本身
                return this;
            } else if (args.length === 1) {
                // 一个参数的话需要进行判断
                if (typeof args[0] === 'string') {
                    // 取值模式
                    return this[0].getAttribute(args[0]);
                } else if (typeof args[0] === 'object') {
                    // json对象的话也算是一个设置模式
                    for (var item in args[0]) {
                        Array.prototype.slice.call(this).each(function () {
                            this.setAttribute(item, args[0][item]);
                        });
                    }
                }
            } else if (args.length === 2) {
                Array.prototype.slice.call(this).each(function () {
                    this.setAttribute(args[0], args[1]);
                });
            }

            // 注意这里的this实际上返回的是一个xframe实例对象,但是xframe.eatend(xframe, {})这里的this实际上是一个xframe(selector, context)函数, 还没有实例化呢
            return this;
        },
        /**
         * 判断DOM元素节点是不是拥有某一个属性
         * @param val
         * @return {boolean}
         */
        hasClass: function (val) {
            if (!this[0]) {
                return false;
            }
            // 默认只会获取第一个元素的相关信息
            return this[0].className === val.trim() ? true : false;
        },
        /**
         * 添加一个class class='xiugang 18 nan'
         * @param val
         */
        addClass: function (val) {
            // 处理传进来的字符串两边的空格
            val = val.trim();
            [].slice.call(this).each(function () {
                // 只要原来的DOM节点上面没有这个属性的话,就直接添加上去
                if (val !== this.className) {
                    this.className += ' ' + val;
                }
            })
            return this;
        },
        /**
         * 注意熟练掌握replace()函数的使用
         * @param val
         */
        removeClass: function (val) {
            val = val.trim();
            [].slice.call(this).each(function () {
                if (val === this.className) {
                    // 使用后面替换前面的
                    this.className = this.className.replace(val, '');
                }
            })
            return this;
        },
        /**
         * 如果有的话就直接删除,没有的话就添加一个
         * @param val
         * @return {toggleClass}
         */
        toggleClass: function (val) {
            val = val.trim();
            [].slice.call(this).each(function () {
                if (val === this.className) {
                    // 如果有的话就直接删除
                    this.className.replace(val, '');
                } else {
                    // 没有的话就添加一个
                    this.className += ' ' + val;
                }
            });
            return this;
        }
    });

    // 不需要参与链式访问的
    xframe.extend(xframe, {});
})(xframe);

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101537.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 对日外包十日谈 之 我所了解的对日外包企业

    对日外包十日谈 之 我所了解的对日外包企业对日外包十日谈之我所了解的对日外包企业蒋彪2010-5-23于上海浦东1.  前言关于对日外包,我其实本来已经不想说些什么了。因为,我已经离开了对日外包行业。这个行业的是与非,正确与错误,我都不想评论什么了。但是唯一的,我觉得我还是应该把承诺的文章写完。有很多人问我,对日外包这个行业怎么样,我不知道该说些什么。如果你只是把这个职业看作是生存的手段,那么无可厚非。如果你

    2022年5月15日
    50
  • 传感器开发流程!_传感器工艺流程

    传感器开发流程!_传感器工艺流程今天公司要求我进行传感器的开发,而且只给2天时间,反映下自己没做过这方面可能需要时间延长下,不管,就给你两天时间!干不完就使劲加班…现在企业压榨劳动力太赤裸裸了

    2022年9月29日
    2
  • PyCharm激活码永久有效PyCharm2021.1.1激活码教程-持续更新,一步到位[通俗易懂]

    PyCharm激活码永久有效PyCharm2021.1.1激活码教程-持续更新,一步到位[通俗易懂]PyCharm激活码永久有效2021.1.1激活码教程-Windows版永久激活-持续更新,Idea激活码2021.1.1成功激活

    2022年6月19日
    80
  • 【金融科技前沿】【长文】金融监管、监管科技以及银行业监管报送概述「建议收藏」

    【金融科技前沿】【长文】金融监管、监管科技以及银行业监管报送概述「建议收藏」上周金融科技前沿课程的主题是《监管科技》,韩海燕老师从金融监管引入,介绍了我国的金融监管体系,接着进入监管科技的详细讲解。我觉得最主要的是弄清楚监管科技的定义,以及在实际的银行业应用场景中具体的运作流程是怎么样的。韩老师讲的很全面,将ABCD等金融科技手段在监管系统中是如何运作的讲的很清楚,收获颇丰,但是比较少涉及到监管的对象和内容,仍没有很清楚监管机构是要监管什么东西?监管机构要求银行金融业机构报送的资料有哪些?这些报送要求的目的分别是什么?所以这篇文章分为三个部分,一是介绍金融监管,二是介绍监科技,三.

    2022年5月6日
    269
  • cisco rip路由

    cisco rip路由

    2021年8月24日
    44
  • 最大似然估计,最大后验估计,贝叶斯估计联系与区别

    最大似然估计,最大后验估计,贝叶斯估计联系与区别1.什么是参数在机器学习中,我们经常使用一个模型来描述生成观察数据的过程。例如,我们可以使用一个随机森林模型来分类客户是否会取消订阅服务(称为流失建模),或者我们可以用线性模型根据公司的广告支出来预测公司的收入(这是一个线性回归的例子)。每个模型都包含自己的一组参数,这些参数最终定义了模型本身。我们可以把线性模型写成y=mx+c的形式。在广告预测收入的例子中,x可以表示广告支…

    2022年10月19日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号