Задать вопрос
@lasthand

Создание объектов в jQuery 1.9.1 — пробел перед тегом дает ошибку?

Обновил библиотеку jQuery до 1.9.1 и начал разбираться с последствиями.



<script type="text/template" id="test_1"><div class="test-container">BBB</div> CCC</script><br>
<br>
<script type="text/javascript"><br>
	var _test = $('#test_1'), _html = _test.html();<br>
	console.log('10.', typeof(_html), _html.length, _html ); // 10. string 41 <div class="test-container">BBB</div> CCC<br>
	console.log('11.', $('<span></span>'+_html).length );    // 11. 2<br>
	console.log('12.', $(_html).length, $(_html).html() );   // 12. 1 BBB<br>
</script><br>
<br>
<script type="text/template" id="test_2"><br>
    <div class="test-container"></div><br>
</script><br>
<br>
<script type="text/javascript"><br>
	var _test = $('#test_2'), _html = _test.html();<br>
	console.log('20.', typeof(_html), _html.length );     // 20. string 40<br>
	console.log('21.', $('<span></span>'+_html).length ); // 21. 3<br>
	console.log('22.', $(_html) ); // Uncaught Error: Syntax error, unrecognized expression: <div class="test-container"></div><br>
</script><br>




Неприятный вывод: попытка создать объект из кода шаблона приводит к ошибке, если перед первым открывающим тегом есть хотя бы один пробел.



var _obj = $( _.template( $('#test_2').html(), {key: value} ) ); // error is here<br>




Вопрос — как корректно создать из шаблона объект для последующих манипуляций?

Не удаляя из текста шаблонов концы строк и пробелы в начале.
  • Вопрос задан
  • 5903 просмотра
Подписаться 3 Оценить Комментировать
Решения вопроса 1
@lasthand Автор вопроса
Вот так всегда — стоит написать вопрос, как через пять минут находится ответ.
bugs.jquery.com/ticket/13223 — closed bug: notabug
Предлагают вместо
$(' <div> ');
использовать
$($.parseHTML(' <div> '.trim()));
Дескать, вы вам не трудно добавить проверку в конкретно известном вам месте, а мы не будем проверять всякий раз. Во имя скорости.
Вопрос можно считать закрытым.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
blo
@blo
инженер-программист
В функции $() анализируется первый символ первого аргумента. Только если он равен <, то принимается за htmlString. В вашем случае нужно явно вызывать $.parseHTML().
$($.parseHTML(_html))

api.jquery.com/jQuery/#jQuery2
Ответ написан
Keyten
@Keyten
html.replace(/^\s/gi, '');
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы