Что-то подобное gsub существует в javascript?
Есть ли способ сделать что-то похожее на ruby gsub в javascript? У меня есть локальный html файл, который я хочу обработать и заменить определенные переменные шаблона контентом, но я не могу понять, как заменить переменные шаблона новым контентом. Html содержит фрагменты, как показано ниже:
<div id="content">
<h1>{{title}}</h1>
{{content}}
</div>
Теперь, если я обертываю все переменные шаблона в названном div, я могу использовать что-то вроде jQuery replaceAll для замены переменной шаблона содержимым, но я не могу понять, как это сделать, не обертывая каждую переменную в div.
Я просто хочу сделать что-то вроде $('document'). gsub ( "{{title}}", "Я - заголовок" ).
У кого-нибудь есть идеи?
Спасибо за вашу помощь!
Ответы
Ответ 1
Вы можете получить доступ к необработанному HTML через свойство DOM element innerHTML
или использовать свойство JQuery html
, а затем выполнить замену:
var html = $(document).html();
$(document).html(html.replace('{{title}}', 'I am a title');
EDIT:
Как отметил Антти Хаапала, замена всего документа HTML может иметь побочные эффекты, с которыми вы не хотите иметь дело, например перезаряжаемые сценарии. Таким образом, перед выполнением подстановки вы должны перейти к самому определенному элементу DOM, т.е.:
var element = $('#content');
var html = element.html();
element.html(html.replace('{{title}}', 'I am a title');
Ответ 2
Если другие искали эквивалент gsub в целом, это заменяет только первое совпадение:
"aa".replace("a", "b") // "ba"
//g
заменяет все совпадения:
"aa".replace(/a/g, "b") // "bb"
"aa".replace(new RegExp("a", "g"), "b"); // "bb"
Ответ 3
Ну, вы можете использовать String.replace с регулярным выражением, но на самом деле вы можете использовать jQuery шаблоны.
http://api.jquery.com/category/plugins/templates/
Ответ 4
Недавно я использовал Handlebars, чтобы взять атрибут данных (шаблон) из таблицы и ввести другое значение (идентификатор записи) из одной из его строки:
// data-row-url="http://example.com/people/{{id}}"
var table = $(this).closest('.data_grid table');
if(table.attr('data-row-url')) {
var record_id = $(this).data('record-id')
var show_url_template = table.data('row-url');
var url_template = Handlebars.compile(show_url_template)
var url = url_template({ id: record_id });
$.getScript(url);
}
Для контекста этот код запускается изнутри события onclick для элементов таблицы tr и извлекает кликовую запись через ajax.
Ответ 5
Я считаю, что это может быть шаблон усов. Возможно, вы захотите проверить mustache.js. Я думаю, вы могли бы скомпилировать это для JS.