Я успешно разбираю HTML из строки, используя DOMParser, но вывод не тот, который мне нужен.
Это HTML Пример, который у меня есть
codesandbox URL
const html = `
<h1>Lorem ipsum head 1</h1>
<p>Lorem ipsum paragraph 2</p>
<p>Lorem ipsum paragraph 3</p>
<img src="http://www.exampleimage.com" />
<p>Lorem ipsum paragraph 4</p>
<p>Lorem ipsum paragraph 5</p>
<video src="http://www.examplevideo.com"></video>
<h1>Lorem ipsum head 6</h1>
`;
const parser = new DOMParser();
const DOM = parser.parseFromString(html, "text/html");
const body = DOM.querySelector("body");
const json = Array.from(body.children).map((element, i) => {
if (element.tagName === "IMG") {
return {
type: "image",
source: element.src
};
}
if (element.tagName === "VIDEO") {
return {
type: "video",
source: element.src
};
}
return {
type: "text",
source: `<${element.tagName.toLowerCase()}>${
element.innerText
}</${element.tagName.toLowerCase()}>`
};
});
console.log(json);
HTML Ввод
<h1>Lorem ipsum head 1</h1>
<p>Lorem ipsum paragraph 2</p>
<p>Lorem ipsum paragraph 3</p>
<img src="http://www.exampleimage.com" />
<p>Lorem ipsum paragraph 4</p>
<p>Lorem ipsum paragraph 5</p>
<video src="http://www.examplevideo.com"></video>
<h1>Lorem ipsum head 6</h1>
Окончательный результат, основанный на этом HTML, который я пытался достичь, это
// [
// {
// 'type': 'text',
// 'source': '<h1>Lorem ipsum head 1</h1><p>Lorem ipsum paragraph 2</p><p>Lorem ipsum paragraph 3</p>'
// },
// {
// 'type': 'image',
// 'source': 'https://example.com/mJet2.jpg'
// },
// {
// 'type': 'text',
// 'source': '<p>Lorem ipsum paragraph 4</p><p>Lorem ipsum paragraph 5</p>'
// },
// {
// 'type': 'video',
// 'source': '<video src="http://www.examplevideo.com" />'
// }
// ]
Но вывод, который я получаю, для каждого тега, который я получаю, { type: 'text', source: '' }
, но я хочу сгруппировать текстовые теги h1, p, p, если они приходят в порядок, и когда он достигает <img /> or <video />
в этом Я хочу, чтобы они были объектами типа { type: 'image', source: 'url of img' }
и продолжались в этом порядке. Поэтому в основном я хочу сохранить порядок, представленный в этом HTML, но объединяю HTML текстов в один объект, как показано в этом примере выше.
Если кто-то может помочь мне с logi, то c быть великим, потому что я не могу понять это