2013-06-21 3 views
0

Я пытаюсь идентифицировать элемент HTML с помощью GUID из элемента в базе данных.jQuery GUID как строка и «Ошибка синтаксиса, нераспознанное выражение»

У меня есть GUID из SQL, который я использую как уникальный идентификатор для тега в HTML. По большей части это работает, пока я не попытаюсь получить доступ к нему с помощью jquery. Код выглядит следующим образом:

 var thisID = '#lesson' + String(this .model.attributes.ID); 
     alert(thisID); 
     $(thisID).fadeTo('slow' , 0.5); 

оповещения работает просто отлично, но JQuery часть вызывает эту ошибку:

Uncaught Error: Syntax error, unrecognized expression: #lesson{35E87357-1251-4C68-A1B2-8F83A4B3E0E9} 

Что странно, если я удалить скобки (например, после первоначального SQL вызов) из GUID, поэтому строка выглядит так:

#lesson35E87357-1251-4C68-A1B2-8F83A4B3E0E9 

... тогда это работает. Но я бы предпочел не снимать скобки. Кроме того, это не похоже на то, где я конкатенирую строку. Любые идеи, как я могу это исправить?

ответ

0

Фигурные скобки означают, что вы определяете объект в JavaScript. Вам нужно избегать их с помощью \\, чтобы использовать их с jQuery.

+0

* «Curly Braces означает, что вы определяете объект в JavaScript». * Они могут означать это, но мы говорим о строке здесь. Кудрявые скобки внутри струн обычно не нуждаются в специальной обработке. В этом случае они должны быть экранированы, потому что строка используется как * selector *. Это не имеет никакого отношения к синтаксису JavaScript или объектам или что-то еще. Я могу создать строку 'var foo =" {42} ";' без проблем. –

+0

Мы говорим о строке вплоть до использования jQuery. При этом вы получаете 'DOM Exception 12, Error: указана недопустимая или недопустимая строка.' – sonoftunk

+0

Я отредактировал свое сообщение, чтобы было более ясно, что определение строки с помощью Curlies в ней прекрасное, но использование этого в качестве селектора jQuery означает побега. – sonoftunk

0

Необходимо удалить экраны {}, так как они являются метасимволами. Вы можете сделать это с помощью String#replace с регулярным выражением:

thisID = thisID.replace(/[{}]/g, '\\$&'); 

От documentation:

To use any of the meta-characters (such as !"#$%&'()*+,./:;<=>[email protected][\]^`{|}~ ) as a literal part of a name, it must be escaped with with two backslashes: \\ . For example, an element with id="foo.bar" , can use the selector $("#foo\\.bar") .