2015-03-24 2 views
0

Мне нужно подключить функцию плагина к нескольким элементам на странице.Связать функцию плагина 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

Использование this:

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

Обратите внимание, что любой хорошо написанный плагин должен уже работать с несколькими экземплярами:

например

Также обратите внимание: проверка на длину также не требуется для любого уважающего себя плагина. Объекты jQuery позволяют запускать методы в коллекциях нулевой длины. Они просто ничего не делают :)

+0

спасибо за аккуратное решение. Существует также этот 'categoryDescriptionCounter', который в моем коде представляет собой набор элементов. На каждой итерации я хочу передать только текущий элемент. Это не работает: '$ (this) .limiter (180, categoryDescriptionCounter [index]);' – luqo33

+0

@ luqo33: вам нужно будет предоставить полный пример кода для этого, поскольку он выходит за рамки вашего исходного вопроса. Может быть, новый вопрос с JSFiddle? :) –

+0

вернемся к вашему ответу (который отлично работает). Почему '$ (this) .limiter()' не эквивалентен 'value.limiter()' когда 'value' является значением obejct каждого элемента в' categoryDescription'. Просто прошу из любопытства. – luqo33

1

Потому что значение является ссылкой на элемент dom, а не на объект оболочки jQuery, поэтому он не будет иметь доступа к методам плагина jQuery.

Вы можете просто вызвать плагин во всем объекте установить как ниже

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

Если плагин не поддерживает вызывается на множестве петли элементов через множество элементов, как

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

A * длина проверка * это пустая трата времени с объектами jQuery. Они простые коллекции нулевой длины, которые все еще имеют все методы. Они просто ничего не делают :) –

Смежные вопросы