Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Алгоритм парсинга (https://javascript.ru/forum/jquery/58728-algoritm-parsinga.html)

зверек 07.10.2015 15:35

Алгоритм парсинга
 
есть примерно следующий кусок кода:
<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.

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



Подскажите, плиз, алгоритм парсинка документа

ksa 07.10.2015 15:38

Цитата:

Сообщение от зверек
какими способами подобные задачи решаются

Как вариант:
- пройтись по em, начиная со второго
- взять его текст и вставить в первый em вместе с <br />
- удалить "отработанный" em

зверек 07.10.2015 15:51

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

Затем, как пометить первый первым, чтобы потом в него что либо вставлять?

ksa 07.10.2015 16:00

Цитата:

Сообщение от зверек
Обычно прохожусь each

Просто игнорируй первый. :D
Цитата:

Сообщение от зверек
это нужно вводить счетчик?

Он там уже есть. ;)
http://jquery-docs.ru/Core/each/

Цитата:

Сообщение от зверек
Или есть какие-то способы попроще?

Циклы кагбэ еще никто не отменял... :D
Цитата:

Сообщение от зверек
как пометить первый первым

У него всегда нулевой индекс в списке. ;)

зверек 07.10.2015 16:05

Спасибо большое!

зверек 07.10.2015 18:06

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

рони 07.10.2015 19:17

зверек,
<!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>

ksa 08.10.2015 08:09

Цитата:

Сообщение от зверек
Как найти элемент, идущий сразу после какого-то другого?

У элемента есть свойство nextSibling...
https://learn.javascript.ru/traversing-dom

зверек 08.10.2015 11:26

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


хотелось получить список всех тэгов, которые идут после em. Но ничего не выводится.

зверек 08.10.2015 11:26

рони,
круто, спасибо!


Часовой пояс GMT +3, время: 01:06.