2013-06-17 5 views
0

Я использую JQuery, и я динамически создаю элементы с помощью before(), но я не могу получить доступ к этим элементам через ID. Это куча кода, и я бы предпочел не публиковать его, если это возможно, но я проверяю, что текст используется как селектор, а затем проверяет длину; длина говорит 0, но я перекрестно ссылаюсь на инструмент «проверять элемент» в хроме, а идентификатор - это, безусловно, то, что должно быть. Это известная проблема с вновь созданными элементами? Когда я получал доступ к элементу, обращаясь к родным братьям того или иного класса, он работал нормально, но теперь есть несколько братьев и сестер с одним и тем же классом, и самый эффективный способ сделать это - с идентификатором.Получение динамически созданного элемента по ID (JQuery)

Вот что я имею в виду, когда я говорю, я проверяю текст:

alert("id=\"impactPlusMinus~"+questionAnswerNameId+"\"\n"+ 
$("#impactPlusMinus~"+questionAnswerNameId).length); 
+0

Вам необходимо получить доступ к этим элементам после того, как они уже находятся в DOM. Вы пытались поставить свои js-коды внутри документа? –

ответ

5

Тильда ~ не является допустимым символом для атрибута ид в HTML4. Попробуйте использовать другой символ.

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

Источник: спецификация HTML4. http://www.w3.org/TR/html4/types.html#type-id

Спецификация HTML5 не так строга, но вы можете столкнуться с проблемами с использованием тильды во многих браузерах или фреймворках, таких как jQuery. Например, в jQuery тильда в селекторе означает что-то другое.

+0

Не уверен, что это jquery или собственное поведение querySelector, но тильда, скорее всего, рассматривается как часть селектора, а не идентификатор. – bfavaretto

+0

Я тебя люблю. Это имеет большой смысл. Спасибо миллион –

+1

@ Mr.Lavalamp http: // stackoverflow.com/questions/70579/what-are-valid-values-for-id-attribute-in-html –

4

Вам нужно бежать тильды:

$("#impactPlusMinus\\~"+questionAnswerNameId) 
2

Поскольку вы используете зарезервированные ключевые слова в Id, Вы можете получить доступ к этому в качестве значения атрибута или избежать специальный символ с \\, если вы непосредственно к нему доступ ,

$('[id="impactPlusMinus~' + questionAnswerNameId+ '"]' 

или

$("#impactPlusMinus\\~" + questionAnswerNameId); 

из docs

Чтобы использовать любой из мета-символов (например,! "#% & $«() * +,./:; < =>? @ []^`{|} ~) Как буквальная часть имени, его следует экранировать с помощью двух обратных косых черт: \.

+0

Fiddle http://jsfiddle.net/5HKCa/ – PSL

+0

Первый, безусловно, не-нет, тогда как последний просто поднимает бровь :) –

+0

@Jack Бывший помогает без необходимо явно избежать, если id содержит зарезервированные символы, динамически, вероятно, с регулярным выражением или что-то еще. Зачем поднимать бровь для последней? – PSL

1

Чтобы избежать столкновения с тем, как JQuery определяет идентификатор выглядит, особенно в случае HTML5, который является менее строгим об именовании, можно создать ссылку на элемент, как это:

$(document.getElementById('impactPlusMinus~' + questionAnswerNameId)); 

Это убеждается только браузер используется для поиска элемента, после чего применяется конструктор jQuery.

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