【问题标题】:Converting jQuery $.extend to pure JavaScript将 jQuery $.extend 转换为纯 JavaScript
【发布时间】:2016-01-16 09:27:33
【问题描述】:

我正在尝试废除 jQuery,因为我只需要它来做很少的事情,而是使用纯 JavaScript

我有这个原始代码:

this.bar = el.find('.bar');
this.options = $.extend({
    delay: $.toInt(el.data('delay')) || 2000
}, options);

我试着用这个来转换它:

function foo(el, options) {

    ..................

    this.bar = el.querySelectorAll(".bar");
    this.options = extend({
        delay: parseInt(el.data('delay')) || 2000 < -- - problem
    }, options);
}

function extend(first, second) {
    for (var secondProp in second) {
        var secondVal = second[secondProp];
        if (secondVal && Object.prototype.toString.call(secondVal) === "[object Object]") {
            first[secondProp] = first[secondProp] || {};
            extend(first[secondProp], secondVal);
        } else {
            first[secondProp] = secondVal;
        }
    }
    return first;
};

但我收到此错误:

“未捕获的类型错误:el.data 不是函数”

有人对如何修复有任何想法吗?

【问题讨论】:

    标签: javascript jquery ecmascript-6 ecmascript-5


    【解决方案1】:

    el是DOM对象引用,不是jQuery对象,所以不能调用jQuery方法。

    要在 VanillaJS 中获取data-* 属性值,可以使用dataset

    使用

    el.dataset.delay
    

    如果你想要使用 jQuery 方法,你可以在 jQuery 中包装元素引用

    $(el).data('delay')
    

    【讨论】:

    • 既然你在滚动,你怎么把它转换成纯JS:---> this.bar.find("[data-src],[data-background-image]")
    • @SarasotaSun 请提出一个新问题。
    • @SarasotaSun Samuel 提出一个单独的问题是正确的,因为这与问题无关。无论如何,从参考this.bar= el.querySelectorAll(".bar");,你可以使用this.bar = el.querySelectorAll('[data-src][data-background-image]'),你可以像在querySelector中一样使用选择器
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    • 2012-03-08
    • 2020-07-24
    • 2013-10-22
    • 1970-01-01
    • 2016-07-18
    • 2017-06-28
    相关资源
    最近更新 更多