javascript - 当返回一个 jQuery 对象数组时,jQuery 如何调用对象的方法?

标签 javascript jquery

将字符串“选择器”传递给 jQuery 函数后:

$('#onenode')

返回一个 jQuery 对象的数组。

这些对象的方法之一是“html”,这就是为什么:

$('#onenode').html('hello!');

有效。

然而...

这个:

$('.somenodes')

返回一个 jQuery 对象数组,这个数组中的每个对象都有方法“html”。

那么如何:

$('.somenodes').html('hello');

工作? “html”方法必须是返回的数组对象的方法。

因此我假设数组对象的“html”方法看起来与此类似:

html: function(value) {
   for(var i=0; i<this.length; i+=1) {
      this[i].html(value);
   }
}

这些都是假设,我几乎是在猜测。

我正在尝试创建我自己的使用“选择器”的小型库,但我在这部分遇到了困难。我知道这可能是不正确的——有人可以解释一下 jQuery 是如何做到的吗?

最佳答案

jQuery 基本上是一个很大的原型(prototype),带有一堆返回 this 的方法,其中 this 是您正在使用的 jQuery 实例与。

I am attempting to create my own small library that uses "selectors"

这是一个在现代浏览器中工作的类 jQuery 模式的简化示例:

(function(win, doc) {

  var __slice = [].slice;

  function jQuery(selector) {
    this.el = this._init(selector);
    this.length = this.el.length;
  }

  function $(selector) {
    return new jQuery(selector);
  }

  jQuery.prototype = {

    _init: function(selector) {
      return __slice.call(doc.querySelectorAll(selector));
    },

    each: function(fn) {
      return this.el.some(fn), this;
    },

    map: function(fn) {
      return this.el.map(fn), this;
    }

  };

  win.$ = $;

}(window, document));

您可以使用它来构建您的 jQuery 之类的库。它的工作方式与 jQuery 完全一样:

$('p').each(function() {
  console.log(this);
});

柯里化(Currying)函数、eachmap 是您入门所需的全部。这些是 jQuery 几乎在任何地方都使用的方法来操作 DOM 元素。 this.el 是元素数组,而 this 是 jQuery 实例。只是不要忘记您需要在每个将被链接的方法中返回这个

关于javascript - 当返回一个 jQuery 对象数组时,jQuery 如何调用对象的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15457928/

相关文章:

javascript - 有很多页面的分页

javascript - JS Web Worker 是宏任务吗?

javascript - Vanilla 网络组件结构

jquery - 在 jQuery 移动单页模板中放置脚本标签的位置

jQuery 目标元素通过其 id 属性使用另一个元素的 href 属性?

javascript - jQuery 中 scrollTop/transform CSS 效果的正确语法?

javascript - 如何使用jquery遍历gridview并检查是否选中了任何复选框

javascript - 根据对象名称合并嵌套的对象数组

javascript - PNG 图像不显示

javascript - 火力地堡 : Convert promise to async/await