Как мне превратить это в цепную функцию jquery? - PullRequest
5 голосов
/ 06 октября 2011

Моя функция возвращает отфильтрованный (массив) список элементов на основе атрибута данных.

Я бы хотел, чтобы я мог сделать эту функцию цепочкой:

$(document).ready(function (){
    function filterSvcType (svcType) {
        var selectedServices = $("#service-list div");
        var chose = selectedServices.filter(function() {
            return $(this).data("service-type") ==  svcType;
        });

        console.log(chose);             
    }
    filterSvcType("hosting");       
});

Что я хочусделать это, как это:

filterSvcType("hosting").fadeOut(); 

Как мне это сделать?

Ответы [ 2 ]

9 голосов
/ 06 октября 2011

Все, что вам нужно добавить, это return chose; после вашего console.log вызова.

Но вы также можете превратить это в плагин jQuery

(function($) {
    $.fn.filterServiceType = function(svcType){
       return this.filter(function(){
           return $(this).data("service-type") ==  svcType;
       });
    };
})(jQuery);

Тогда вы можете позвонить как

$('#service-list div').filterSvcType('hosting').fadeOut();

Что немного более jQueryish.

1 голос
/ 06 октября 2011

Вы можете просто вернуть отфильтрованные элементы

$(document).ready(function (){
    function filterSvcType (svcType) {
        var selectedServices = $("#service-list div");
        var chose = selectedServices.filter(function() {
            return $(this).data("service-type") ==  svcType;
        });
        return chose;
        console.log(chose);             
    }
    filterSvcType("hosting").fadeOut();       
});

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

var filtered = filterSvcType("hosting");
filtered.fadeOut();

То же самое, что цепочка, на самом деле.

Вот быстрый тест, чтобы показать его в действии

...