Селектор jQuery для выбора с идентификатором: 1

#jquery #jquery-selectors

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

Вопрос:

У меня есть следующий select с необычным атрибутом ID / Name:

 <select name="customfield_10021:1" id="customfield_10021:1" class="select cascadingselect-child">
  

Похоже, это не позволяет мне выбирать его с помощью:

 unit = $('#customfield_10021:1 option:selected').text();
  

http://jsfiddle.net/stzPQ/

 uncaught exception: Syntax error, unrecognized expression: 1
  

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

Спасибо!

Джаред

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

1. Взгляните на документацию: api.jquery.com/category/selectors

2. Спасибо всем за ответы. Проблема была между ушами, поскольку я больше фокусировался на необычном атрибуте ID / Name, чем на синтаксисе селектора.

Ответ №1:

Выход из : с помощью \

 unit2 = $('#customfield_10021\:1 option:selected').text();
  

Обновлен jsfiddle

Или вы можете использовать document.getElementById("customfield_10021:1") в качестве контекста для вашего селектора.

 var s = document.getElementById("customfield_10021:1");
unit2 = $('option:selected', s).text();
  

Ответ №2:

Вы должны избегать двоеточия, поэтому сделайте это:

 $("#customfield_10021\:1")
  

У вас было бы:

 unit = $('#customfield_10021\:1 option:selected').text();
  

Это потому, что двоеточие является специальным символом, и его нужно экранировать обратной косой чертой.
Надеюсь, это поможет. Приветствия

Ответ №3:

Не используйте двоеточие:

 unit = $('#customfield_10021\:1 option:selected').text();
  

Смотрите Часто задаваемые вопросы по jQuery.


Вместо использования option:selected вы можете просто использовать .val() для получения значения <select> :

 unit = $('#customfield_10021\:1').val();
  

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

1. Нет, мне нужен текст; значение является индексом для текстового значения.

2. Хорошо, просто хотел убедиться, что вы не слишком усложняете ситуацию.

Ответ №4:

Попробуйте это:

 unit = $('#customfield_10021\:1 option:selected').text();
  

: Обычно используется для псевдоселекторов, и обратная косая черта должна быть удвоена в строковом литерале.

Во избежание сомнений, символ двоеточия является допустимым в атрибутах ID и Name.

Ответ №5:

Это работает:

 $('[id="customfield_10021:1"] option:selected').text()
  

Живая демонстрация: http://jsfiddle.net/stzPQ/2 /

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

1. Это интересный подход. Я полагаю, это исключило бы двоеточие, интерпретируемое как селектор.

2. @Jared Да, я так считаю. Кавычки внутри селектора атрибутов гарантируют, что строка действительно является именем, а не другим селектором.

Ответ №6:

Я думаю, что это работает:

 unit = $("#customfield_10021\:1 option:selected").text();
  

Ответ №7:

Помните, что двоеточие используется для разграничения псевдокласса, точно так же, как вы делаете с option:selected , вам придется удалить двоеточие из идентификатора вашего элемента:

 <select name="customfield_10021_1" id="customfield_10021_1" class="select cascadingselect-child">
  

Это потому, что jQuery пытается использовать #customfield_10021:1 как id = customfield_10021 с псевдоклассом 1 , который не существует, отсюда и ошибка.

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

1. Правильно! Единственная проблема в том, что я не могу удалить двоеточие (это пользовательское поле в системе JIRA).

2. Затем вам нужно будет исключить двоеточие, как предлагали другие.

3. Этот ответ неверен — ему не придется удалять двоеточие. Ему просто нужно избежать этого.

Ответ №8:

Другое решение в JSF — запретить указывать имя формы перед каждым идентификатором.

Это можно сделать с помощью prependId=»false» в теге формы :

             <h:form id="gestion_clefs" prependId="false">