1. // 属性框架
  2. (function (xframe) {
  3. // 需要参与链式访问的(必须使用prototype的方式来给对象扩充方法)
  4. xframe.extend({
  5. /**
  6. * 获取/设置某一个元素的属性信息
  7. * @return {*}
  8. */
  9. attr: function () {
  10. // 获取属性信息:两种格式,1. 取值模式 2.设置模式
  11. var args = arguments;
  12. if (args.length === 0) {
  13. // 没有参数的话,就直接返回本身
  14. return this;
  15. } else if (args.length === 1) {
  16. // 一个参数的话需要进行判断
  17. if (typeof args[0] === 'string') {
  18. // 取值模式
  19. return this[0].getAttribute(args[0]);
  20. } else if (typeof args[0] === 'object') {
  21. // json对象的话也算是一个设置模式
  22. for (var item in args[0]) {
  23. Array.prototype.slice.call(this).each(function () {
  24. this.setAttribute(item, args[0][item]);
  25. });
  26. }
  27. }
  28. } else if (args.length === 2) {
  29. Array.prototype.slice.call(this).each(function () {
  30. this.setAttribute(args[0], args[1]);
  31. });
  32. }
  33. // 注意这里的this实际上返回的是一个xframe实例对象,但是xframe.eatend(xframe, {})这里的this实际上是一个xframe(selector, context)函数, 还没有实例化呢
  34. return this;
  35. },
  36. /**
  37. * 判断DOM元素节点是不是拥有某一个属性
  38. * @param val
  39. * @return {boolean}
  40. */
  41. hasClass: function (val) {
  42. if (!this[0]) {
  43. return false;
  44. }
  45. // 默认只会获取第一个元素的相关信息
  46. return this[0].className === val.trim() ? true : false;
  47. },
  48. /**
  49. * 添加一个class class='xiugang 18 nan'
  50. * @param val
  51. */
  52. addClass: function (val) {
  53. // 处理传进来的字符串两边的空格
  54. val = val.trim();
  55. [].slice.call(this).each(function () {
  56. // 只要原来的DOM节点上面没有这个属性的话,就直接添加上去
  57. if (val !== this.className) {
  58. this.className += ' ' + val;
  59. }
  60. })
  61. return this;
  62. },
  63. /**
  64. * 注意熟练掌握replace()函数的使用
  65. * @param val
  66. */
  67. removeClass: function (val) {
  68. val = val.trim();
  69. [].slice.call(this).each(function () {
  70. if (val === this.className) {
  71. // 使用后面替换前面的
  72. this.className = this.className.replace(val, '');
  73. }
  74. })
  75. return this;
  76. },
  77. /**
  78. * 如果有的话就直接删除,没有的话就添加一个
  79. * @param val
  80. * @return {toggleClass}
  81. */
  82. toggleClass: function (val) {
  83. val = val.trim();
  84. [].slice.call(this).each(function () {
  85. if (val === this.className) {
  86. // 如果有的话就直接删除
  87. this.className.replace(val, '');
  88. } else {
  89. // 没有的话就添加一个
  90. this.className += ' ' + val;
  91. }
  92. });
  93. return this;
  94. }
  95. });
  96. // 不需要参与链式访问的
  97. xframe.extend(xframe, {});
  98. })(xframe);

【JavaScript框架封装】实现一个类似于JQuery的属性框架的封装的更多相关文章

  1. 【JavaScript框架封装】实现一个类似于JQuery的基础框架、事件框架、CSS框架、属性框架、内容框架、动画框架整体架构的搭建

    /* * @Author: 我爱科技论坛 * @Time: 20180715 * @Desc: 实现一个类似于JQuery功能的框架 * V 1.0: 实现了基础框架.事件框架.CSS框架.属性框架. ...

  2. 分析一个类似于jquery的小框架

    在网上下了一个类似于jQuery的小框架,分析源码,看看怎么写框架. 选择器Select //用沙箱闭包其整个代码,只有itcast和I暴漏在全局作用域 (function( window , und ...

  3. 【JavaScript框架封装】实现一个类似于JQuery的DOM框架的封装

    // DOM框架(选择器框架) (function (xframe) { // 需要参与链式访问的(必须使用prototype的方式来给对象扩充方法) xframe.extend({ /** * 向现 ...

  4. 【JavaScript框架封装】实现一个类似于JQuery的缓存框架的封装

    // 缓存框架 (function (xframe) { /** * 实现了缓存框架的临时存储功能(内存存储) * @type {{data: Array, get: (function(*): *) ...

  5. 【JavaScript框架封装】实现一个类似于JQuery的动画框架的封装

    // 动画框架 (function (xframe) { // 需要参与链式访问的(必须使用prototype的方式来给对象扩充方法) xframe.extend({}); // 不需要参与链式访问的 ...

  6. 【JavaScript框架封装】实现一个类似于JQuery的选择框架的封装

    // 选择框架 (function (xframe) { // 需要参与链式访问的(必须使用prototype的方式来给对象扩充方法) xframe.extend({}); // 不需要参与链式访问的 ...

  7. 【JavaScript框架封装】实现一个类似于JQuery的事件框架的封装

    // 事件框架 (function (xframe) { // 需要参与链式访问的(必须使用prototype的方式来给对象扩充方法) xframe.extend({ /** * 实现一个浏览器的基本 ...

  8. 【JavaScript框架封装】实现一个类似于JQuery的内容框架的封装

    // 内容框架 (function (xframe) { // 需要参与链式访问的(必须使用prototype的方式来给对象扩充方法) xframe.extend({ /** * .html()用为读 ...

  9. 分析一个类似于jquery的小框架 (2)

    核心构造函数 (function ( window, undefined ) { // 定义Itcast构造函数 function Itcast ( selector ) { return new I ...

随机推荐

  1. UVa 10297 - Beavergnaw

    题目:假设一个底边与高为D的圆柱切去一部分使得.剩下的中心是底边与高为d的圆柱. 和以他们底面为上下地面的圆锥台,已知切去的体积,求d. 分析:二分,计算几何.圆锥台体积公式:π*(r^2+r*R+R ...

  2. iWatch报错: Authorization request cancled

    iWatch报错: Optional (Error Domin = com.apple.healthkit Code = 5 "Autherization request canceled& ...

  3. 黑马day01 笔记

    一.xml语法   1.文档声明     用来声明xml的基本属性,用来指挥解析引擎怎样去解析当前xml     通常一个xml都要包括而且仅仅能包括一个文档声明     xml的文档必须在整个xml ...

  4. bzoj2958: 序列染色&&3269: 序列染色

    DP这种东西,考场上就只能看命了.. #include<cstdio> #include<iostream> #include<cstring> #include& ...

  5. 国内物联网平台初探(六) ——庆科云FogCloud

    平台定位 FogCloud 快速接入智能硬件 FogCloud为开发者提供便捷的智能硬件接入服务,真正实现敏捷开发,快速迭代. FogCloud提供功能强大的云端服务 包括 产品/APP管理 ,消息通 ...

  6. word2vec (一) 简介与训练过程概要

    摘自:http://blog.csdn.net/thriving_fcl/article/details/51404655 词的向量化与word2vec简介 word2vec最初是Tomas Miko ...

  7. Node.js:模块系统

    ylbtech-Node.js:模块系统 1.返回顶部 1. Node.js模块系统 为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 模块是Node.js 应用程序的 ...

  8. javascript定义类或对象的方式

    本文介绍的几种定义类或对象的方式中,目前使用最广泛的是:混合的构造函数/原型方式.动态原型方式.不要单独使用经典的构造函数或原型方式. 工厂方式 构造器函数 原型方式 混合的构造函数/原型方式 动态原 ...

  9. [WebServer] Linux下Apache与Tomcat整合的简单方法

    Apache与Tomcat比较联系 apache支持静态页,tomcat支持动态的,比如servlet等. 一般使用apache+tomcat的话,apache只是作为一个转发,对jsp的处理是由to ...

  10. 【BZOJ2438】【中山市选2011】杀人游戏

    [问题描述] 一位冷血的杀手潜入 Na-wiat,并假装成平民.警察希望能在 N 个人里面, 查出谁是杀手.  警察能够对每一个人进行查证,假如查证的对象是平民,他会告诉警察,他认识的人, 谁是杀手, ...