Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.08.2016, 09:02
Профессор
Отправить личное сообщение для dima85 Посмотреть профиль Найти все сообщения от dima85
 
Регистрация: 14.03.2010
Сообщений: 194

Замена данных в html используя xml
В переменной data, хранится html блок:
<div>
 <h5>тест</h5>
 <div>{time}</div>
 <a href="{ip}">Страница</a>
</div>


В переменной xml хранится:
<?xml version='1.0'?>
<new><time>10.00</time><ip>127.0.0.1</ip></new>


Нужно смотреть {*} в data, они равный данным с xml и вставить эти данные в data. Подскажите пожалуйста как это сделать.

Должно получится так:
<div>
 <h5>тест</h5>
 <div>10.00</div>
 <a href="127.0.0.1">Страница</a>
</div>

Последний раз редактировалось dima85, 25.08.2016 в 09:43.
Ответить с цитированием
  #2 (permalink)  
Старый 25.08.2016, 11:02
Профессор
Отправить личное сообщение для dima85 Посмотреть профиль Найти все сообщения от dima85
 
Регистрация: 14.03.2010
Сообщений: 194

Вот такой вариант ищет и заменяет {ip}
$(xml).find('ip').each(function(){
var text=$(this).contents().eq(0).text();
var new_string = data.replace('{ip}',text);
alert(new_string);
 });


Подскажите пожалуйста как сделать цикл, который будит искать все {*}
Ответить с цитированием
  #3 (permalink)  
Старый 25.08.2016, 11:19
Кандидат Javascript-наук
Отправить личное сообщение для Strongman Посмотреть профиль Найти все сообщения от Strongman
 
Регистрация: 22.03.2016
Сообщений: 132

Тег <ip> существует?
Ответить с цитированием
  #4 (permalink)  
Старый 25.08.2016, 11:46
Аватар для dd_smol
Кандидат Javascript-наук
Отправить личное сообщение для dd_smol Посмотреть профиль Найти все сообщения от dd_smol
 
Регистрация: 08.03.2015
Сообщений: 131

Сообщение от Strongman Посмотреть сообщение
Тег <ip> существует?
Это не HTML а XML в нем нет определенных тегов их разрабочек добавляет сам.
Ответить с цитированием
  #5 (permalink)  
Старый 25.08.2016, 11:49
Аватар для dd_smol
Кандидат Javascript-наук
Отправить личное сообщение для dd_smol Посмотреть профиль Найти все сообщения от dd_smol
 
Регистрация: 08.03.2015
Сообщений: 131

Автору темы могу посоветовать воспользоваться готовым решение, а не изобретать велосипед при том что их уже изобретено не мало. https://learn.javascript.ru/templates
Ответить с цитированием
  #6 (permalink)  
Старый 25.08.2016, 13:45
Профессор
Отправить личное сообщение для dima85 Посмотреть профиль Найти все сообщения от dima85
 
Регистрация: 14.03.2010
Сообщений: 194

Сделал велосипед

var new_string;
      var $kids = $(xml).find("new").children();
       $kids.each(function(){
       var tagName=this.tagName;
       var cols = $(xml).find(tagName).contents().eq(0).text();
       new_string = data.replace(new RegExp('{'+tagName+'}', 'g'),cols);
       data = new_string;
      });



Все работает! Хочу попробовать попытается избавится от jquery и написать на чистом JavaScript помогите пожалуйста.

Начал делать, но появляются ошибки:
SyntaxError: An invalid or illegal string was specified
var elements = document.querySelectorAll(kids);

var new_string;
      var $kids = data2.querySelector('new').childNodes; //Возможно тут не правильно
      var elements = document.querySelectorAll($kids);
      Array.prototype.forEach.call(elements, function(){
       var tagName=this.tagName;
       var cols = $(data2).find(tagName).contents().eq(0).text(); //Не знаю как это сделать
       new_string = data.replace(new RegExp('{'+tagName+'}', 'g'),cols);
       data = new_string;
      });

Последний раз редактировалось dima85, 25.08.2016 в 13:54.
Ответить с цитированием
  #7 (permalink)  
Старый 26.08.2016, 09:59
Аватар для dd_smol
Кандидат Javascript-наук
Отправить личное сообщение для dd_smol Посмотреть профиль Найти все сообщения от dd_smol
 
Регистрация: 08.03.2015
Сообщений: 131

Вариантов много.

Можно так:
var
	html	= '<div><h5>тест</h5><div>{time}</div><a href="{ip}">Страница</a></div>',
	xml		= '<?xml version="1.0"?><new><time>10.00</time><ip>127.0.0.1</ip></new>',
	parse	= new window.DOMParser(),
	docXML	= parse.parseFromString(xml, 'application/xml');

[].slice.call( docXML.documentElement.children ).forEach(function ( el ) {
	html = html.replace( new RegExp('{' + el.tagName + '}', 'g'), el.textContent );
});

Или так:
var 
	xml		= '<?xml version="1.0"?><new><time>10.00</time><ip>127.0.0.1</ip></new>',
	html 	= '<div><h5>тест</h5><div>{time}</div><a href="{ip}">Страница</a></div>';

html = html.replace(/\{([a-z]*)\}/gi, function ($0, $1) {
	return xml.match( new RegExp('<' + $1 + '>(.*)</' + $1 + '>') )[1].trim();
});

Последний раз редактировалось dd_smol, 26.08.2016 в 11:28.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача данных из javascript в html Doraemon Элементы интерфейса 12 26.05.2015 08:36
Замена html элементов - регулярка r3l0c Общие вопросы Javascript 4 27.06.2014 20:13
Прикрутить HTML + XML vah-smile (X)HTML/CSS 1 01.07.2010 21:52
загрузка данных из XML, почему загружает только в Explorer asked86 AJAX и COMET 2 18.12.2009 16:29
передача данных из xml в html yupa AJAX и COMET 40 30.07.2009 10:11