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


После того, как я внес изменения в структуру HTML для проекта, мне пришлось изменить многие селекторов jQuery во многих местах. Чтобы избежать этой проблемы в будущем, я решил сделать простую функцию, где я прохожу элемент, указывающий, где я и строку, указывающую, куда я хочу пойти. Эту функцию следует применять логику, необходимую для доступа к указанной конечной точке. Я показал этот код кому-то и ему не понравилось, он сказал, что я должен использовать многочисленные функции или объекта. Я думал, что бы сделать код намного дольше, практически никакого преимущества, но я не уверена. Приведенный ниже код для этого инструмента, которая представляет собой древовидное отслеживания времени приложение, например, "узел" относится к узлу в дереве. Логика не является исчерпывающим, поскольку я могу добавить только код функции по мере необходимости.

// Access one particular element from another.
function from(start, end) {
  start = $(start)
  if(start.parent().hasClass('headline')) {
    var node = start.parent().parent()
    if(end == 'node')  return node
    else if(end == 'model')  return get_model(node.attr('model_id'))
  }
  if(end == 'headline')  return start.children('.headline')
  if(end == 'child_list')  return start.children('ol')
  if(end == 'each_child')  return start.find('> ol > .model')
  if(end == 'parent')  return start.parents('.model')
  if(end.indexOf('.') != 0)  end = '.' + end
  if(start.hasClass('headline'))  return $(start.children(end))
  return start.find('> .headline > ' + end)
}


196
2
задан 6 сентября 2011 в 07:09 Источник Поделиться
Комментарии
1 ответ

Ответ зависит от того, для меня, на многие вещи. Некоторые из них:


  • это прототип или нет? Похоже, это

  • тебе в кайф? Если так, делайте все, что работает для вас, если это прототип.

  • насколько большой будет весь проект?

Вот список вещей, которые меня беспокоят:


  1. Название функции: от? Может иметь смысл для вас, но это не очень хорошее название. Это слишком...обычным. Я бы взял swissArmyKnifeFromElement за С в любой день - легко запомнить, трудно перепутать. Если этот способ почему-то часть объекта (например, дерева), то это может быть нормально для частной функции.

  2. Аргументов может означать что-то еще - начало и конец предложить целый ряд. Это может ввести в заблуждение. конец может быть много вещей (пока двое): правило, как 'узел' или 'child_list' или имя класса. Опять же, вводит в заблуждение - это принесет только боль.

    function findTreeElements(root, rule, params)
    {
    //implementation
    }

    //you could call it like this
    findTreeElements(a,'class',{'name':'someClassName'});
    findTreeElements(a,'headline');


  3. Чем больше ваш проект, тем более сложной эта функция станет - в таких формах, которые нельзя предвидеть :) возможно именно поэтому ваш друг говорил об объектах и множеством функций. библиотека jQuery использует объекты везде, и я думаю, что вы должны сделать это:


    • определить дерево/список объектов

    • определение задач/узел/любой объект

    • у дерева сохранить список задач/узлов/и т. д

    • определить методы для обработки дерева/узел/что внутри связанных объектов

    что-то вроде (совершенно случайно, возможно, связанные, например):

    var list = tree.findNode(someNodeNameOrIndex).tasks();

    Это дерево объект для управления списком узлов и реализовать findNode способ (который разбирает дом так, как вам нравится).

    Это до узла объекта (возвращается дерева findNode), чтобы управлять список задач внутри этого узла (или нечто подобное) и реализовать задачи, функции, которая будет работать аналогично текущей найти(Элем 'child_list').


Посмотрите на код, написанный разработчиками лучше 'JavaScript и учиться у них. Есть много хороших проектов, которые могут научить вас много. Смотришь на приличного размера проекты, а не "модули" или основных фрагментов; расширения браузера также являются хорошими кандидатами.

4
ответ дан 6 сентября 2011 в 09:09 Источник Поделиться