2014-02-17 2 views
1

У меня есть приложение ruby ​​on rails, которое создает строку json и сохраняет его в атрибуте данных div. Это строка в файле рубинового перед тем, как вынесенное в Teh браузере:Почему jquery волнует этот селектор?

'{"all":{"$(\'#condition_fields .table_form div[data-id=2]&nbspselect[data-attr=bar_type]\')":{"equal":"Baz"}}}' 

Строка JSON выглядит следующим образом, когда осмотрены в браузере:

data-dependencies="{"all":{"$('#condition_fields .table_form div[data-id=2] select[data-attr=bar_type]')":{"equal":"Baz"}}}" 

плагин JQuery потребляющего селектор в этой строке называя eval на нем. Селектор, когда выход на консоль с помощью плагина Jquery, выглядит так:

$('#condition_fields .table_form div[data-id=2] select[data-attr=bar_type]') 

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

Error: Syntax error, unrecognized expression: #condition_fields .table_form&nbspdiv[data-id=2]&nbspselect[data-attr=bar_type] 

или

SyntaxError: Unexpected token ILLEGAL 

в зависимости от того, как я кормлю строку (кавычках или без) в JQuery Eval в Teh консоли.

Любая помощь была бы принята с благодарностью!

Спасибо!

+0

Вы можете подумать о замене выражения «freak out» – Bloodcount

+1

Я вроде как снимаю в темноте здесь, но в чем причина использования ' ' в рубиновом файле, а не в буквальном пространстве? – Chowlett

+0

Почему JSON отформатирован так? Можете ли вы изменить способ составления? Как сейчас, у вас есть оператор jquery как «ключ» объекта. Это означает, что вам нужно сделать некоторые довольно сомнительные вещи, чтобы извлечь из него что-нибудь полезное, например 'eval' на« ключ »объекта, который вы не можете надежно получить. – Cerbrus

ответ

1

Javascript не нравится неразрывные пробелы. Вместо использования   используйте  .

1

Ваша ошибка показывает ваш селектор: #condition_fields .table_form&nbspdiv[data-id=2]&nbspselect[data-attr=bar_type].

Как вы можете видеть, есть неразрывное пространство. Это особый символ, и jQuery не распознает его как пространство.

Попробуйте удалить пробелы между .table_form, div и select, затем введите истинное пространство.

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

$('<div>').html(youString).text(); 
+0

''   ".replace (/ \ s/g, '');' -> '"   "'. Или я что-то неправильно истолковываю? – Cerbrus

+0

@Cerbrus Это зависит, так как он сказал, что его выход был $ $ ('# condition_fields .table_form div [data-id = 2] select [data-attr = bar_type]') ','   'преобразуются в символ пробела , Но да, если они не будут преобразованы, изменения не будут изменены. –

+0

Замена   в консоли с пробелами по-прежнему вызывает ошибку SyntaxError: Unexpected token ILLEGAL. Замена   в рубине создает Uncaught SyntaxError: Неожиданный конец ошибки ввода. – biagidp

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