Выбор по элементу ID + класс элемента дает один и тот же элемент дважды

Почему jQuery возвращает один и тот же элемент дважды здесь?

Проверял HTML много раз, там только один <div> с id="3" и class="password_field_real".

Это результат получения всех элементов с помощью class="password_field_real":

> $(".password_field_real")

[
    <div class="password_field_real" id="2" style="display: none;"></div>, 
    <div class="password_field_real" id="3" style="display: none;"></div>,
    <div class="password_field_real" id="7" style="display: none;"></div>,
]

Однако, когда я пытаюсь получить class="password_field_real" и id="3", я получаю список из двух div, которые являются одинаковыми!

> $("#3.password_field_real")

[
    <div class="password_field_real" id="3" style="display: none;"></div>,  
    <div class="password_field_real" id="3" style="display: none;"></div>
]

Это не относится к двум другим div:

> $("#7.password_field_real")

[
    <div class="password_field_real" id="7" style="display: none;"></div>
]

Почему это может случиться?

* ОБНОВЛЕНИЕ *

Воспроизводится в jsFiddle

* ОБНОВЛЕНИЕ # 2 *

Если используется нечисловой идентификатор, все отлично работает.

Ответ 1

Прежде всего, id должен быть уникальным на странице. Это и есть идея.

Ваша проблема в том, что вы используете недопустимый селектор ID (в соответствии с HTML4):

  • Идентификаторы ID и NAME должны начинаться с буквы ([A-Za-z]) и могут быть за которым следует любое количество букв, цифр ([0-9]), дефис ( "-" ), подчеркивания ( "_" ), двоеточия ( ":" ) и периоды ( "." ).

В других доктринах существуют разные ограничения, но вам всегда нужна хотя бы одна буква. Поскольку вы используете только номер, он недействителен. Это может быть объяснением, когда вы используете нечисловой идентификатор все в порядке. Тем не менее это немного странное поведение jQuery.

Подтвердите свой идентификатор хотя бы одной буквой [A-Za-z], или даже лучше, сделайте ее описательной.

Ответ 2

НИКОГДА не используйте несколько раз один и тот же идентификатор, id ДОЛЖЕН быть УНИКАЛЬНЫМ

alert( $("#3").length ); // will just return 1 not 8

этот действительно тупой код просто выберите ваш хороший, но никогда не используйте его, вызовет конец света

alert( $("#3").find("#3").filter(".password_field_real").attr("class") );

если вам нужен текущий идентификатор для каждого под "div" и "a", попробуйте данные - почему бы не использовать такой код

$(".password_entry").each(function(){
    var $t = $(this);
    var currentId = $t.attr("id");
    $t.find("div,a").data("id",currentId);
});

теперь вы можете извлечь текущий идентификатор из всех под "div" и "a" с .data( "id" )

например:

$(".password_field_mask").click(function(){ alert( $(this).data("id") ); });