jQuery выбирает по имени и идентификатору

#jquery-selectors

#jquery-селекторы

Вопрос:

У меня есть таблица, подобная такой:

     <table>
        <tr>
            <td>
                <input type="radio" name="Sample1" id="Sample1" value="1" />
                <input type="radio" name="Sample1" id="Sample2" value="1" />
            </td>
            <td>
                <input type="radio" name="Sample2" id="Sample1" value="1" />
                <input type="radio" name="Sample2" id="Sample2" value="1" />
            </td>
            etc....
        </tr>
    </table>
  

Я хочу иметь возможность выбирать конкретный переключатель с помощью name и id . Например, выберите переключатель с именем Sample2 и идентификатором Sample1 . Я пытался сделать это:

     $('[id="Sample1"][name="Sample2"]').checked = true;
  

Но безуспешно… Как я должен это делать?

Комментарии:

1. У вас может быть только один идентификатор для каждого элемента на странице

2. Действительно. Идентификаторы — это уникальные идентификаторы для элементов. Чего, черт возьми, вы пытаетесь здесь достичь?

3. Кроме того, вы не можете определить один и тот же идентификатор дважды.

4. @TheAdamGaskins: Выйти. Ввод недопустим .

5. @TheAdamGaskins тогда вам нужно сказать своему боссу, что его входные данные недействительны, и ему нужно их изменить, вы не можете просто игнорировать правила кода без последствий

Ответ №1:

  $('#Sample1[name="Sample2"]').attr('checked','checked');
  

но элементы могут иметь только один идентификатор, поэтому, возможно, вы хотите class вместо id

   $('.Sample1[name="Sample2"]').attr('checked','checked');
  

затем ваш html

 <table>
    <tr>
        <td>
            <input type="radio" name="Sample1" class="Sample" value="1" />
            <input type="radio" name="Sample1" class="Sample" value="1" />
        </td>
        <td>
            <input type="radio" name="Sample2" class="Sample1" value="1" />
            <input type="radio" name="Sample2" class="Sample2" value="1" />
        </td>
    </tr>
</table>
  

Редактировать

внесены некоторые изменения, вот рабочая демонстрация

Комментарии:

1. Это работает отлично, хотя с ID ‘s он выбирает только первый переключатель (что и ожидалось). Мне придется поговорить с боссом о переходе на class

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

3. «элементы могут иметь только один идентификатор» технически неверно, однако он ДОЛЖЕН быть уникальным в поддереве elements.

4. О, вы тут расходитесь во мнениях, @MarkSchultheiss Я думаю, люди понимают, что имеется в виду. Однако, если вы хотите отредактировать мой пост, будьте моим гостем.

5. Не беспокойтесь, это на самом деле отчасти исчезает и с более свежими спецификациями HTML. Комментарий действительно был с моей стороны предназначен для других, поскольку я вижу много «сломанного» html с дублирующимися идентификаторами и т.д. (Не вами!) я на самом деле проголосовал

Ответ №2:

.checked = true неверно. Используйте .attr('checked', true) .

Кроме того, вы можете использовать идентификатор только один раз. Идентификаторы — это уникальные идентификаторы для элементов. Я понятия не имею, чего вы пытаетесь здесь достичь, но:

 <html>
    <body>
        <input type="radio" name="Sample1" id="SampleA" />
        <input type="radio" name="Sample1" id="SampleB" />
        <input type="radio" name="Sample2" id="SampleC" />
        <input type="radio" name="Sample2" id="SampleD" />

        <script type="text/javascript">
        $(function() {
            $('#SampleC[name="Sample2"]').attr('checked', true);

            // [id="SampleC"][name="Sample2"] works too
        });
        </script>
    </body>
</html>
  

выполняет работу.

Редактировать

На самом деле .attr('checked', 'checked') более переносимый.

Комментарии:

1. Да… На самом деле я это не контролирую. Мой босс дал мне URL-адрес страницы, которая генерирует таблицы в этом формате … вот с чем мне приходится работать.

2. @TheAdamGaskins: Выйти. Входные данные недопустимы , и может случиться все, что угодно.