2016-10-07 3 views
2

Я столкнулся с очень странным поведением с помощью jQuery. У меня есть function вроде этого:Почему = вместо - в результатах селектора выбирает все

  function refreshTechBubble(techID, value) { 
       $("span.top-right-data[data-id=" + techID + "]").html(value); 
      } 

Этот function обновляет конкретный техник пузырь. Чтобы сделать его более простым и техническим, давайте просто укажем, что эта функция изменяет внутренний html span, который уникально найден через селектор "span.top-right-data[data-id=" + techID + "]". Все это очень хорошо, и все работает правильно.

Однако при реализации этого я сделал опечатку, и я имел неверную реализацию:

  function refreshTechBubble(techID, value) { 
       $("span.top-right-data[data=id=" + techID + "]").html(value); 
      } 

Обратите внимание, что я написал = вместо - случайно. Хотя исправление было тривиальным, и в данный момент у меня нет никаких проблем, я все равно задаюсь вопросом о поведении, которое я испытал во время тестирования. С такой опечаткой я ожидал бы, что jQuery не найдет никаких тегов и, следовательно, не обновит свой внутренний html, однако вместо этого обновит внутренний HTML всех span s с classtop-right-data. Почему я испытал это поведение до исправления, а не поведение, которое я ожидал?

+0

Вы хотите сообщить об этом как об ошибке. Я предполагаю, что они просто игнорируют недопустимые селекторы. – Bergi

+2

Я сразу получаю синтаксическую ошибку. – Xufox

+1

НО это 'функция' мой друг;) –

ответ

2

Это была ошибка в старой версии Sizzle, которая была частью jQuery вплоть до 1.7. Он был исправлен в Sizzle rewrite в 1.8 (хотя он не указан среди ошибок, которые были зафиксированы в release notes).

Интересно, что все версии jQuery, похоже, корректно выбрасывают SYNTAX_ERR, когда селектор атрибутов либо появляется один, либо квалифицируется явным универсальным селектором. Только когда селектор атрибутов квалифицируется любым другим простым селектором (появляющимся либо до или после него), что он не вызывает SYNTAX_ERR.

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

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