将jQuery $ .extend转换为纯JavaScript

时间:2015-10-17 19:18:08

标签: javascript jquery ecmascript-6 ecmascript-5

我正在尝试取消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;
};

但我收到此错误:

  

&#34;未捕获的TypeError:el.data不是函数&#34;

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

1 个答案:

答案 0 :(得分:0)

el是DOM对象引用,它不是jQuery对象,所以你不能在它上面调用jQuery方法。

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

使用

el.dataset.delay

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

$(el).data('delay')