JavaScript——Day 29(jQuery元素选择)

ゝ一纸荒年。 2023-07-23 11:58 13阅读 0赞

在这里插入图片描述

self-jQuery

  1. (function () {
  2. function jQuery(selector) {
  3. return new jQuery.prototype.init(selector); // init的原型链上有css的方法
  4. }
  5. jQuery.prototype.init = function (selector) {
  6. // var this = {}
  7. // 选出 dom 标签 并且包装成jQuery对象 返回
  8. // id class
  9. this.length = 0;
  10. // null undefined
  11. if (selector == null) {
  12. return this;
  13. }
  14. if (typeof selector == 'string' && selector.indexOf('.') != -1) {
  15. var dom = document.getElementsByClassName(selector.slice(1));
  16. } else if (typeof selector == 'string' && selector.indexOf('#') != -1) {
  17. var dom = document.getElementById(selector.slice(1));
  18. }
  19. if (selector instanceof Element || dom.length == undefined) {
  20. // 只有一个dom
  21. this[0] = dom || selector;
  22. this.length++;
  23. } else {
  24. // 你有很多个dom Elements
  25. // 循环dom
  26. for (var i = 0; i < dom.length; i++) {
  27. this[i] = dom[i] || selector[i];
  28. this.length++;
  29. }
  30. }
  31. // return this;
  32. }
  33. jQuery.prototype.css = function (config) {
  34. // 循环操作每一个dom
  35. for (var i = 0; i < this.length; i++) {
  36. for (var attr in config) {
  37. this[i].style[attr] = config[attr]; // 这里如果加了px那么就只能修改像素值了 对于颜色透明度就会使其失效
  38. }
  39. }
  40. return this; // 链式操作的精髓 又返回了一个函数本身
  41. }
  42. jQuery.prototype.pushStack = function (dom) {
  43. // dom newObject
  44. if (dom.constructor != jQuery) {
  45. dom = jQuery(dom);
  46. }
  47. dom.prevObject = this;
  48. return dom;
  49. }
  50. jQuery.prototype.get = function (num) {
  51. return num == null ? [].slice.call(this, 0) : num >= 0 ? this[num] : this[num + this.length];
  52. }
  53. jQuery.prototype.eq = function (num) {
  54. var dom = num == null ? null : num >= 0 ? this[num] : this[num + this.length];
  55. return this.pushStack(dom);
  56. }
  57. jQuery.prototype.add = function (selector) {
  58. var curObj = jQuery(selector);
  59. var baseObj = this;
  60. var newObject = jQuery();
  61. for (var i = 0; i < curObj.length; i++) {
  62. newObject[newObject.length++] = curObj[i];
  63. }
  64. for (var i = 0; i < baseObj.length; i++) {
  65. newObject[newObject.length++] = baseObj[i];
  66. }
  67. // newObject.prevObject = this;
  68. this.pushStack(newObject);
  69. return newObject;
  70. }
  71. jQuery.prototype.end = function () {
  72. return this.prevObject;
  73. }
  74. jQuery.prototype.init.prototype = jQuery.prototype; // init的原型链上有css的方法
  75. window.$ = window.jQuery = jQuery; // 内部jQuery的函数被保存到了window上所有没有被释放 就是闭包
  76. })();

发表评论

表情:
评论列表 (有 0 条评论,13人围观)

还没有评论,来说两句吧...

相关阅读

    相关 jQuery元素选择器(element)

    一 介绍 元素选择器是根据元素名称匹配相应的元素。 通俗的讲元素选择器指向的是DOM元素的标记名,也就是说元素选择器是根据元素的标记名选择的。 可以把元素的标记名理解成学