2014-05-19 4 views
1

Я был немного смущен, когда столкнулся с этим в своей программе. Поэтому мне было интересно, знает ли кто, что может быть здесь. В конце концов, я довольно новичок в JQuery.

Почему:

$('[id="' + nameOftheID + '"]').append("Append some text"); 

работа для меня.

Еще

$("#" + nameOftheID).append("Append some text"); 

не работает для меня. В этом случае 'nameOftheID' является var, который точно совпадает с идентификатором span Я пытаюсь добавить некоторый текст (я протестировал и подтвердил это при отладке). Почему обычный # селектор выбора для выбора на основе ID не добавляет текст для меня. но другой метод?

Мой код работает в конце. Я просто хочу знать, почему A работает и B не делает.

Имя моего идентификатора "Ruleset [0] .Conditions [0]"

+0

первый - это селектор значений имен, а второй - селектор id. –

+2

Имеет ли 'nameOftheID' какие-либо специальные символы, такие как' [] 'Если так вам нужно их избежать. – Anton

+0

Показать демонстрационную версию jsfiddle. –

ответ

2

Вы должны использовать \\ для экранирующих символов

#Ruleset\\[0\\]\.Conditions\\[0\\] 

Ниже differnce для двух селекторов:

$("#" + nameOftheID).append("Append som text"); 

Выше код, чтобы выбрать элемент по ID и здесь синтаксис использовать # ,

И

$('[id="' + nameOftheID + '"]').append("Append some text"); 

Это происходит под селекторов атрибутов, где вы можете ограничить выбор для конкретного тега, как показано ниже

$('input[id="inputId"]').append("Append some text");// here it will check the id attribute of input tag only 

Кроме того, атрибут селекторы можно использовать для поиска элементов с значения начинаются с некоторый текст, как найти ввод с id начинаться с 'nameOf'

$('input[id^="nameOf"]').append("Append some text"); 

Куст Селектора атрибутов ce могут использоваться для получения элементов с большей фильтрацией или для более точного выбора. Подробнее о селекторах here.

1

The ID is Ruleset[0].Conditions[0] as an example

Ваш ID содержит символы со специальным значением в селекторе.

Если вы только префикс, то с #, то [ начнет селектор атрибутов, а . начнет селектор классов. Вы должны избегать символов со специальным значением в селекторе, если вы используете их в селекторе id.

#Ruleset\[0\]\.Conditions\[0\] 

Обратите внимание, что вы должны включать спецсимволы селектора в строке и \ является маскирующим для JavaScript строковых литералов (что потребует спасаясь себя для того, чтобы \ части строки).

Эти символы не имеют особого значения внутри селектора цитируемых атрибутов.

Я предпочитаю избегать проблемы, сохраняя символы со специальным значением из значений id в первую очередь.

+2

Вам нужно удвоить \\, чтобы избежать – Anton

0

My code works in the end. I just want to know why A works and B doesnt.

Шипение (часть JQuery, который обрабатывает $(...) вещей) принимает идентификатор быть следующим:

"(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+" 

То есть, сбежавший символ или слово символ, или ASCII символ выше чем \xA0. Это исключает все метасимволы препинания и регулярного выражения, такие как [. Так что, когда вы что-то вроде #foo[] к функции $, она не будет распознана и бросить ошибку:

Uncaught Error: Syntax error, unrecognized expression: #foo[] 

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

0

Как я вижу в разделе комментариев, что ваш пядь-х id имеет некоторые специальные символы, как [] скобки:

Этот код

$('[id="' + nameOftheID + '"]') 

представляет, как это:

$('[id="Ruleset[0].Conditions[0]"]') // works because of string representation. 

Это представляет id как строку, поэтому он работает, но для другого это не так, для этого представления id вам нужно избегать вашей спецификации ial chars с двойной косой чертой \\

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