2016-06-20 1 views
3

Я понимаю, что это довольно конкретный способ выбора узла с использованием (я предполагаю) jQuery и выбор идентификатора, вероятно, будет более результативным. Но кроме того, и что это длинный селектор, что еще звонит «тревожные звонки» здесь?

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

Saw вопрос здесь: http://www.reed.co.uk/jobs/senior-web-developer/29234531

+1

Вы считаете, что ваша структура HTML никогда не изменит 'body div div ...' ... огромный будильник. – KevBot

+2

Overspecificity – elclanrs

+0

@KevBot будет больше, если бы это было 'div> div' –

ответ

3

Да.

  • Это слишком специфичны
  • Это очень хрупкая структуре HTML меняет
  • Он использует id (значит быть уникальным на странице), но квалифицирует его с другими селекторов, которые должны быть ненужным. Иногда это необходимо, когда JS-файл работает на нескольких страницах, но это, как правило, плохой дизайн.
  • Он использует :eq(0), который убивает производительность, так как селектор не может быть передано document.querySelectorAll()
  • Возвращаемый элемент должен быть только один элемент, в любом случае из-за id используется.

Это должно быть просто $('#foo'), который будет передаваться прямо в document.getElementById() (если Шипение не изменилось, так как я в последний раз читал источник) или просто родной DOM API.

+0

Хрупкость - хорошая точка. –

3

Несколько вещей, выскочить на меня:

  1. #foo:eq(0) - The :eq(0) почти наверняка совершенно ненужным. :eq означает «элемент в наборе соответствия по этому индексу», и, конечно, может быть только один элемент с данным идентификатором. Итак, сразу же я отмечаю: использует ли общий код дубликаты в одном документе?

  2. Предполагаемый ненужный :eq(0) также является единственной частью селектора, который не является стандартным CSS, и, таким образом, он заставляет jQuery обрабатывать селектор в Sizzle (собственный движок), а не позволять браузеру делать это. Может ли это вызвать проблемы с производительностью? Нет (или скорее: беспокоиться об этом, если и когда это произойдет), но это бессмысленно.

  3. Часть body полностью бессмысленная.

  4. Всякий раз, когда я вижу селектор идентификаторов в качестве потомка в селекторе, это сразу заставляет задуматься, действительно ли автор понял правила для идентификаторов в документах (это связано с # 1, но немного отличается). Это правда, что этот селектор не так же, как просто #foo; критическое существо, которое #foo найдет элемент #foo, где бы он ни существовал, тогда как этот селектор найдет его только , если находится внутри пролета внутри div внутри div. Таким образом, при использовании селектора-потомка, эффективно заканчивающегося идентификатором селектора , может быть действительным (если вы хотите игнорировать элемент, если он не там, где вы его ожидаете), это реальный край.В обзоре кода я бы хотел увидеть комментарий , почему это было необходимо.

Короче говоря, я хочу на самом деле хорошая причина от автора того, почему это не было просто $("#foo").

+0

... er, um и хрупкость, поскольку [alex указал] (http://stackoverflow.com/a/37926589/157247). Как я пропустил хрупкость? –

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

  • Нет связанных вопросов^_^