javascript - 单独适用于页面上多个元素的方法

标签 javascript jquery oop object methods

我找不到这方面的好的指南,但我在这里寻找的只是朝着正确方向的插入。

假设我定义了一个新方法

Object.defineProperty(Object.prototype, 'myMethod', {
    enumerable : false,
    configurable: true,
    value : function(args) {
        var _self = this;
        _self.doThis = function () {
            // some functionality
        }

        ....

        return this
});

里面的代码适用于$('#element'),但如果我将该方法应用于$('.elements'),它将仅适用于数组的第一个元素。如何重写该方法以适用于单个元素和元素组?

编辑 ******************************** ****

所以我得到一个提示,当 jQuery 可用时,我会使用 jQuery.fn.extend(),但我担心的是 - 上面的方法是否可以重写,以便它适用于同一个类(class)?

最佳答案

我认为您混淆了两个非常不同但略有相关的概念

  • 编写 jquery 插件,可以作用于多个选定元素
  • 向现有对象原型(prototype)添加属性/方法

由于您似乎关心 DOM 操作,我将展示如何同时执行这两项操作。


jQuery

编写 jQuery 插件的范围很大,但您应该从基本的 guide to authoring plugins 开始。您实质上将方法添加到 $.fn 中,然后它们按照所有其他 jQuery 方法工作。如您所知,jQuery 选择器可以选择许多元素,您可以通过从插件返回 this.each 来处理这种情况

$.fn.myPlugin = function() {

    return this.each(function() {
        // Do something to each element here.
    });

};

用法:$(".myElements").myPlugin();

原版

如果您使用普通 JavaScript 选择多个元素,您可能会使用 getElementsByNamequerySelector/querySelectorAll 之一。您需要将新方法添加到这些方法的返回类型中 - 即 NodeList - 并且您可以以正常方式在 value 中枚举它

Object.defineProperty(NodeList.prototype, 'myMethod', {
    enumerable : false,
    configurable: true,
    value : function(args) {
        var _self = this;
        console.log(_self.length); // should be the number of elements
        return this
    }
});

用法:document.getElementsByName("something").myMethod();document.querySelectorAll("a").mymethod();

关于javascript - 单独适用于页面上多个元素的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37612991/

相关文章:

javascript - 是否可以在 javascript 中创建具有 123,345 这样的序列而不是组合的快捷方式?

javascript - 提交后清除我的表单输入

javascript - jQuery Ajax 将数据发布到同一页面 PHP 不起作用

javascript - 为什么我无法向 google.com 发送 GET 请求?

c++ - C++ 中的类成员隐私和 header

oop - 如何在RealBasic上实现自省(introspection)?

python - 如何在 Python 中从该类中创建嵌套类的实例?

javascript - 在 x 轴 d3 中仅显示一项 - 使用刻度值的序数

动画结束前调用的 JQuery 动画回调

javascript - 使用 Highcharts 在仪表图上显示更多数据