Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.10.2015, 15:35
Аспирант
Отправить личное сообщение для зверек Посмотреть профиль Найти все сообщения от зверек
 
Регистрация: 18.06.2009
Сообщений: 88

Алгоритм парсинга
есть примерно следующий кусок кода:
<em>
знач.1
</em>
<br>
<em>знач.2 </em>
<em>
<br>
знач.3
</em>
<br>
<em>знач.4</em>

То есть, несколько тэгов em, следующих друг за другом или прерывающиеся тэгом br.
Требуется преобразовать этот код вот в такой:
<em>
знач.1
<br>
знач.2 
<br>
знач.3
<br>
знач.4</em>


То есть, весь текст всунуть в одну пару тэгов em.

Как в принципе, какими способами подобные задачи решаются, какие функции используются?



Подскажите, плиз, алгоритм парсинка документа
Ответить с цитированием
  #2 (permalink)  
Старый 07.10.2015, 15:38
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от зверек
какими способами подобные задачи решаются
Как вариант:
- пройтись по em, начиная со второго
- взять его текст и вставить в первый em вместе с <br />
- удалить "отработанный" em
Ответить с цитированием
  #3 (permalink)  
Старый 07.10.2015, 15:51
Аспирант
Отправить личное сообщение для зверек Посмотреть профиль Найти все сообщения от зверек
 
Регистрация: 18.06.2009
Сообщений: 88

А как пройтись начиная со второго? Обычно прохожусь each, но со второго - это нужно вводить счетчик? Или есть какие-то способы попроще?

Затем, как пометить первый первым, чтобы потом в него что либо вставлять?
Ответить с цитированием
  #4 (permalink)  
Старый 07.10.2015, 16:00
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от зверек
Обычно прохожусь each
Просто игнорируй первый.
Сообщение от зверек
это нужно вводить счетчик?
Он там уже есть.
http://jquery-docs.ru/Core/each/

Сообщение от зверек
Или есть какие-то способы попроще?
Циклы кагбэ еще никто не отменял...
Сообщение от зверек
как пометить первый первым
У него всегда нулевой индекс в списке.
Ответить с цитированием
  #5 (permalink)  
Старый 07.10.2015, 16:05
Аспирант
Отправить личное сообщение для зверек Посмотреть профиль Найти все сообщения от зверек
 
Регистрация: 18.06.2009
Сообщений: 88

Спасибо большое!
Ответить с цитированием
  #6 (permalink)  
Старый 07.10.2015, 18:06
Аспирант
Отправить личное сообщение для зверек Посмотреть профиль Найти все сообщения от зверек
 
Регистрация: 18.06.2009
Сообщений: 88

А еще такой вопрос. Как найти элемент, идущий сразу после какого-то другого? Сейчас гуглю, но пока чего-то не нахожу.
Например, если в коде встречается конструкция
<em><br>...</em>
то <br> удаляем. Но только если br идет сразу после em. Без промежуточного текста, тэгов и прочее.
В такой конструкции
<em>бла-бла<br>...</em>
br удалятся уже не должен.

Последний раз редактировалось зверек, 07.10.2015 в 18:15.
Ответить с цитированием
  #7 (permalink)  
Старый 07.10.2015, 19:17
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

зверек,
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script>
    $(function() {
    var a = $("em:first"),
        b = $("em:last"),
        c = [];
    a.nextUntil(b).add(a).add(b).contents().each(function() {
        var a = $.trim($(this).text());
        a && c.push(a)
    });
    a.html(c.join("<br>"));
    a.nextUntil(b).add(b).remove();
    alert($("body").html())
});


  </script>
</head>

<body>
<em>
знач.1
</em>
<br>
<em>знач.2 </em>
<em>
<br>
знач.3
</em>
<br>
<em>знач.4</em>
</body>

</html>
Ответить с цитированием
  #8 (permalink)  
Старый 08.10.2015, 08:09
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от зверек
Как найти элемент, идущий сразу после какого-то другого?
У элемента есть свойство nextSibling...
https://learn.javascript.ru/traversing-dom
Ответить с цитированием
  #9 (permalink)  
Старый 08.10.2015, 11:26
Аспирант
Отправить личное сообщение для зверек Посмотреть профиль Найти все сообщения от зверек
 
Регистрация: 18.06.2009
Сообщений: 88

пытаюсь разобраться с этим nextSibling
почему не работает вот такая конструкция
var el = document.querySelectorAll('em');  
  while(next_em = el.nextSibling) console.log(next_em.tagName);


хотелось получить список всех тэгов, которые идут после em. Но ничего не выводится.
Ответить с цитированием
  #10 (permalink)  
Старый 08.10.2015, 11:26
Аспирант
Отправить личное сообщение для зверек Посмотреть профиль Найти все сообщения от зверек
 
Регистрация: 18.06.2009
Сообщений: 88

рони,
круто, спасибо!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Необычный алгоритм. Неповторяющиеся числа. broadcast77 Общие вопросы Javascript 5 13.01.2014 10:46
Как написать алгоритм выборки в javascript? Isaac Общие вопросы Javascript 13 06.02.2013 11:15
Волновой алгоритм Ли с 8-ми направлениями boy_cow Общие вопросы Javascript 6 04.10.2012 21:08
Алгоритм работы обработчика события salikoff Events/DOM/Window 1 20.09.2012 23:46
Спецификация Ecma-262. Пункт 8.7.2 PutValue(V,W) не до конца ясен алгоритм. vandy3 Общие вопросы Javascript 0 09.01.2012 17:31