Если селектор возвращает массив узлов, как работать с каждым по отдельности?
Сорри, тупой вопрос. Может быть я сильно торможу =( Не могу понять такую штуку. Допустим на странице есть несколько инпутов, и я их выбираю таким способом:
var inputs = $('input'); Как я понимаю, теперь inputs - просто массив, в котором хранятся узлы в jqueryвском формате (простите, не знаю, как правильно их называть). Но когда я делаю так: for (var i = 0; i < inputs.length; i++) { var $input = inputs[i]; // $input - это jqueryвский элемент и я могу обращаться ко // всяким функциям, например attr() $input.attr('name'); // и вижу ошибку, мол элемент не имеет метода attr } В чем ошибка? |
Ошибка в том, что inputs[i] - это не jQuery-объект, а обычный DOM узел. И у него нет метода attr.
И вообще, я не понимаю, зачем Вам обычные циклы, когда jQuery предоставляет более удобные и соответствующие концепции фреймворка средства для работы с коллекциями - each, например. Не говоря уже о том, что многие другие методы корректно работают с несколькими элементами. |
Спасибо, понял =)
Ну, в моем случае удобней было бы вызывать функцию напрямую, чтоб передать туда еще какие-то параметры. А то each вызывает функцию передавая ей только два параметра: index, value. |
Цитата:
|
Я знаю. Мануал читал. Вот, что я делаю:
есть несколько селектов (<select>), которые надо заполнить значениями. Для этого я создал функцию populate, которой в качестве первого аргумента передается массив селектов. Для этого достаточно и простого each. Так раньше и было. Потом понадобилось, чтоб в этих селектах устанавливалось значением по умолчанию. Но! Это надо не всегда. Поэтому вторым параметром в функцию populate я передаю true, когда надо устанавливать дефолтные значения и ничего не передаю, когда не надо. Вот соб-сно поэтому и стал использовать функцию вместо each. Если можно это будет сделать с помощью each, я только за. Опыта у меня мало, так что может быть делаю глупые ошибки. |
Цитата:
var param = 'Я параметр!'; $('селектор').each(function(){alert(param);}) Конечно это будет рабочий но не самый правильный способ, так как нет инкапсуляции, но для ее реализации есть достаточно методов. |
Ага, ясно. А инкапсуляцию можно делать так:
var selects = $('селектор'); foo(selects, true); function foo(selects, param) { selects.each(function(){alert(param);}) } Или я не так понял? |
Все зависит от конкретной задачи. Например в данном случае param становится свойством объекта window или по другому становится глобальной переменной. Для небольших задач это не станет проблемой, но для чего-то более серьезного не рекомендуется хранить переменные в глобальной области видимости если они используются лишь в одном месте кода. Если говорить о jQuery то в нем есть метод data позволяющий связать переменную с каким-нибудь элементом страницы. Но конечно же инкапсуляция важна тогда когда требуется писать код по всем канонам ООП, хотя иногда его применять - как палить из пушки по воробьям.
З.Ы Что-то меня понесло =) |
Часовой пояс GMT +3, время: 22:17. |