将jQuery插件函数绑定到循环中的许多元素

时间:2015-03-24 16:11:14

标签: javascript jquery

我需要将插件函数附加到页面上的多个元素。

对于单个元素,函数附加如下(limiter是插件函数):

if (fullDescription.length) {
    fullDescription.limiter(1000, fullDescriptionCounter);
}

我需要将此插件附加到页面上的多个元素。为实现这一目标,我提出了这个代码:

if (categoryDescription.length) {
    $.each(categoryDescription, function(index, value) {
        value.limiter(180, categoryDescriptionCounter);
    });
}

不幸的是,limiter无法从作为$.each()迭代器回调的匿名函数中访问。

我有什么选择来完成这项工作?如何将limiter绑定到匿名函数?

2 个答案:

答案 0 :(得分:2)

使用this

$.each(categoryDescription, function(index, value) {
    $(this).limiter(180, categoryDescriptionCounter);
});

请注意,任何编写良好的插件都应该已经处理了多个实例:

e.g。

 categoryDescription.limiter(180, categoryDescriptionCounter);

另请注意:任何自尊插件也不需要检查长度。 jQuery对象允许在零长度集合上运行方法。他们什么都不做:)

答案 1 :(得分:1)

因为value是dom元素引用而不是jQuery包装器对象所以它不能访问jQuery插件方法。

您可以在整个对象集中调用插件,如下所示

if (categoryDescription.length) {
    categoryDescription.limiter(180, categoryDescriptionCounter);
}

如果插件不支持在一组元素上调用,则循环遍历像

这样的元素集
if (categoryDescription.length) {
    categoryDescription.each(function (index, value) {
        $(value).limiter(180, categoryDescriptionCounter);
    });
}