Парсинг большого списка UL
Подскажите пожалуйста как сделать, парсинг на JS.
На странице есть ссылка с классом semiroot, в ссылочном тексте ("Пункт списка") - строка (на кириллице или латинице, могут быть цифры) Код:
<a class="semiroot" href="/punkt-spiska/">Пункт списка</a>Как JS взять за маску строку из ссылочного текста class="semiroot" (см. выше) пройтись по списку <ul class="s-catalog-list"> и в случае совпадения вывести вложенные div c ul или просто ul class="s-sub-list" с подпунктами. Код:
<ul class="s-catalog-list"> |
href="/punkt-spiska/ Подразумевает, что будет переход на новую страницу. Или что то другое?
|
Цитата:
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
section {
border: 1px solid red;
margin: 2px;
}
ul {
border: 1px solid #008000;
}
</style>
</head>
<body>
<a class="semiroot" href="/punkt-spiska/">Пункт списка</a>
<ul class="s-catalog-list">
...
<li class="">
<a href="/punkt-spiska/">Пункт списка</a>
<div>
<ul class="s-sub-list">
<li class="s-sub-item">
<a class="s-sub-header" href="/punkt-spiska/pod-punkt-spiska-1/">Под-пункт списка 1</a>
</li>
<li class="s-sub-item">
<a class="s-sub-header" href="/punkt-spiska/pod-punkt-spiska-2/">Под-пункт списка 2</a>
</li>
<li class="s-sub-item"><a class="s-sub-header" href="test">test</a>
</li>
<li class="s-sub-item">
<a class="s-sub-header" href="/punkt-spiska/pod-punkt-spiska-2/">Под-пункт списка 3</a>
</li>
<li class="s-sub-item"><a class="s-sub-header" href="/punkt-spiska/pod-punkt-spiska-4/">Под-пункт списка 4</a>
</li>
</ul>
</div>
</li>
<li class="">
<a href="/punkt-spiska/">Пункт списка</a>
<div>
<ul class="s-sub-list">test</ul>
</div>
</li>
</ul>
<h3>section</h3>
<section></section>
<script>
let patern = document.querySelector('.semiroot').getAttribute('href');
let sel = `[href*="${patern}"]`;
let uls = Array.from(document.querySelectorAll('ul.s-catalog-list ul.s-sub-list')).filter(ul => ul.querySelector(sel));
document.querySelector('section').append(...uls.map(ul => {
ul = ul.cloneNode(true);
ul.querySelectorAll('ul.s-sub-list > li.s-sub-item').forEach(li => li.querySelector(sel) || li.remove())
return ul
}))
</script>
</body>
</html>
|
рони,
Интегрировал, работает, как всегда в яблочко. Спасибо! |
Только заметил один момент, работает как мне надо, но под ссылочным текстом я подразумевал текст внутри тегов <a href...>ссылочный текст</a> (он по науке так вроде и называется, поправьте если я не прав), а скрипт выпарсивает по адресу документа URL, т.е. по самой ссылке. Но это так - лирика! :) И возможно по URL-у даже правильнее.
|
| Часовой пояс GMT +3, время: 19:02. |