Разница несущественна, id
значения должны быть уникальными в документе . Если вам нужно сгруппировать входы, вам придется использовать что-то отличное от id
(class
часто [over] используется для этого, но вы можете сделать это также и структурно - например, все input
элементы внутри данного контейнера).
Причина различий в результатах, которые вы видите, заключается в том, как оптимизирует механизм выбора jQuery (Sizzle). Если вы передадите простой селектор на основе идентификатора, Sizzle использует document.getElementById
(а затем проверяет, что он получил действительно id
из-за ошибок в IE до IE8). Таким образом, он возвращает один элемент.
Но если вы передаете составной селектор, такой как input#names
, он не следует этому пути оптимизации и фактически выполняет поиск DOM (либо непосредственно в своем собственном коде, либо через document.querySelectorAll
, если браузер его поддерживает). Обычно это включает в себя поиск всех соответствующих элементов (например, всех элементов input
), а затем фильтрацию списка в соответствии с другими классификаторами. Так что бывает, что в вашем тестовом браузере Sizzle или механизм выбора браузера не закорачивают этот переключатель, даже если он должен знать, что, найдя один соответствующий элемент, это все, что ему нужно сделать.