Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 22.09.2009, 09:05
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Octane
Вот за что я не люблю jQuery, всегда идет работа с коллекцией элементов, даже если в ней один элемент или вообще ничего нет.
Некоторые его за это любят. Позволяет, в принципе, избавиться от лишних проверок.
Ответить с цитированием
  #12 (permalink)  
Старый 23.09.2009, 02:33
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от Octane
Вот за что я не люблю jQuery, всегда идет работа с коллекцией элементов, даже если в ней один элемент или вообще ничего нет.
ну тогда уж надо вспомнить людей, которые не любят динамические языки. Не могу сказать, что люблю jQuery, но считаю, что функции не должны строго относиться ко входным данным, но возвращать результат в строгом формате. Т.е. если функция должна возвращать коллекцию элементов в общем случае, то она должна возвращать ее даже если нужно вернуть один элемент или не надо возвращать элементов вообще. Иначе после получения результата нужно делать проверки: это массив, один элемент или ничего.

И при чем тут jQuery непонятно. getElementsByTagName тоже возвращает коллекцию в любом случае
Ответить с цитированием
  #13 (permalink)  
Старый 23.09.2009, 08:25
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Да динамические языки здесь ни при чем. В случае, когда работа идет с коллекцией элементов, что в jQuery, что просто в JavaScript, мы как бы сразу в голове держим вариант: когда коллекция пуста, тело цикла не выполнится. Но когда точно знаешь, что работаешь с одним элементом, этот вариант вылетает из головы, вспоминается это в последний момент, когда уже больше не знаешь в чем может быть ошибка.
Я несколько раз встречал в кодах коллег вообще не нужные и просто забытые цепочки на jQuery.
Когда писал свой диплом, то постарался хоть как-то избавится от этой проблемы, разделив способы работы с одним элементом и с коллекцией:
$("идентификатор").remove(); // если элемент не существует, будет ошибка.
$.tag("имя_тега").each("remove"); // выполнить метод remove для каждого найденного элемента
А проверять существование элементов не так уж часто и нужно, в большинстве случаев достаточно проверить наличие какого-то корневого элемента, а с дочерними уже можно работать без проверок.

Последний раз редактировалось Octane, 23.09.2009 в 08:27.
Ответить с цитированием
  #14 (permalink)  
Старый 23.09.2009, 17:11
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

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

т.е. ты про то, что неплохо бы иметь функцию, которая возвращает коллекцию и функцию, возвращающую один элемент? С этим согласен, но непонятно "Но когда точно знаешь, что работаешь с одним элементом, этот вариант вылетает из головы, вспоминается это в последний момент, когда уже больше не знаешь в чем может быть ошибка.", слишком абстрактно для меня. Вроде если рассчитываешь всегда получать один элемент в этом месте и даже если функция возвращает коллекцию, то либо работаешь с первым элементом коллекции, либо записываешь первый элемент в отдельную переменную и работаешь с ней.
Ответить с цитированием
  #15 (permalink)  
Старый 23.09.2009, 18:02
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Но когда точно знаешь, что работаешь с одним элементом, забываешь, что jQuery продолжает работать с коллекцией из одного элемента, и ошибки в поиске элементов становятся не очевидными, не явными.

Вот пример из темы:
$("div#" + sID).text(data);
Кажется, какая тут вообще может быть ошибка? Я пока заметил, что автор не закрыл теги, успел посмотреть на все 3 post-запроса в фаербаге, вывел алертом все идентификаторы внутри each, а только потом уже проверил, находит ли эти элементы jQuery.
Сообщение от x-yuri
Я говорил, что если функция возвращает то массив, то элемент, то ничего, то нужно после каждого вызова проверять какой из вариантов мы имеем
Да, это было бы неудобно.
Сообщение от x-yuri
т.е. ты про то, что неплохо бы иметь функцию, которая возвращает коллекцию и функцию, возвращающую один элемент?
Даже больше, синтаксис не должен скрывать от нас то, с чем мы работаем в данный момент, с одним или коллекцией элементов, как в моем примере
Ответить с цитированием
  #16 (permalink)  
Старый 23.09.2009, 18:11
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от Octane
Да, в случае с jQuery это было бы неудобно.
это в любом случае неудобно

Сообщение от Octane
Но когда точно знаешь, что работаешь с одним элементом, забываешь, что jQuery продолжает работать с коллекцией из одного элемента
Сообщение от Octane
Даже больше, синтаксис не должен скрывать от нас то, с чем мы работаем в данный момент, с одним или коллекцией элементов, как в моем примере
все-таки я считаю, что просто должна быть возможность искать один элемент, что-то типа
$1("div#" + sID).text(data);

т.е. $ всегда возвращает массив, а $1 - или один элемент или null
Ответить с цитированием
  #17 (permalink)  
Старый 23.09.2009, 18:33
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка навигации браузера smmurf Events/DOM/Window 29 01.06.2009 12:16
Обработка Select Oleg_Antonov Элементы интерфейса 17 16.05.2009 03:23
Обработка событий клавиатуры MaxPayne Events/DOM/Window 26 01.05.2009 10:37
Получение и обработка параметров killer_djon Events/DOM/Window 2 04.02.2009 09:12
обработка одновременно двух клавиш клавиатуры Destrifer Events/DOM/Window 8 20.12.2008 15:25