2011-01-30 4 views
0

У меня есть функция JQuery, которая получает замкнув на все входные элементы, такие как:JQuery - получить доступ ко всем элементам из каждых() функций

$("input").blah();

Как я могу получить доступ ко всем элементам этого типа внутри этой функции ? а не только тот, который в настоящее время обрабатывается jQuery.

Функция выглядит следующим образом:

(function($) { 
    $.fn.blah = function(){ 

    this.each(function(){ 

     // how can I access all elements of type "this" here? 

     return this; 
    }); 

}; 

})(jQuery); 

Я хочу прочитать некоторые атрибуты из всех этих элементов, а затем сделать некоторые вещи на текущий элемент, который обрабатывается, на основе этих атрибутов

+0

Как вы определяете "этот тип"? Вы имеете в виду буквально атрибут 'type' на входе? – user113716

+0

да patrick dw. – Alex

+0

Решение зависит от того, что вы в конечном итоге делаете, но похоже, что вы должны фильтровать их в группы, если вам нужно действовать на них как на группу. – user113716

ответ

2

Это звучит, как вы надеетесь, фильтровать входы на основе атрибута type.

Я не знаю, чего вы в конечном итоге хотите достичь, но я бы сказал, что вы, вероятно, не хотите делать это в цикле .each().

Сначала я бы отфильтровал разные типы, а затем выполнил ваши циклы.

(function($) { 
    $.fn.blah = function(){ 

    var text = this.filter('[type=text]'); 
    var radio = this.filter('[type=radio]'); 
    var checkbox = this.filter('[type=checkbox]'); 

    text.each(function(){ 

     // do something with all "text" inputs 

     return this; 
    }); 

}; 

})(jQuery); 

В качестве альтернативы можно иметь только один цикл, но выполняют различные действия в зависимости от значения type. Это будет работать, только если вам не нужна коллекция в целом.

(function($) { 
    $.fn.blah = function(){ 

    this.each(function(){ 

     if(this.type === "text") { 
      // do something with text inputs 
     } else if(this.type === "checkbox") { 
      // do something with checkboxes 
     } 
     // and so on 

    }); 

}; 

})(jQuery); 
+1

+1 это, вероятно, то, чего она хотела. Я думаю, что она хочет перебирать, например, «текст», а затем перебирать «это» с результатами текста. – Raynos

6
(function($) { 
    $.fn.blah = function(){ 

    var that = this; 
    this.each(function(index, element){ 

     // this here means the element in that[i] 
     // that here means the original jQuery object. 

     return this; 
    }); 

}; 

})(jQuery); 

Вы можете сэкономить this в переменной, а затем получить доступ в обратном вызове .each.

+0

Могу ли я использовать $ (тот) .each (function) .. внутри первого 'each'? – Alex

+1

+1, избили меня. & @Alexandra: [рабочий пример] (http://jsfiddle.net/PeY3z/) –

+1

@ Александра да, вы можете, но это плохо для этого. Я рекомендую вам делать несколько блоков this.each, а не затем вложенные блоки. – Raynos

1

$('input').bind("whatever", function() { 
$('input [type="' + $(this).attr('type') + '"]).each(function() { 
    //...whatever code here 
    }); 
}); 

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