Как я могу собрать все названные HTML-теги в массив?

У меня есть страница с данными, которые мне нужно проанализировать, в формате

<tag>dataIwant</tag>
<tag>dataIwant</tag>
<tag>dataIwant</tag>
<othertag>moarData</othertag>
<othertag>moarData</othertag>

Для простоты я хотел бы извлечь все наборы любого именованного тега в виде массива (желательно только значения). Например:

array1(dataIwant,dataIwant,dataIwant);
array2(moarData,moarData);

Это легко извлечь с помощью jQuery, ЕСЛИ они были названы элементами или имели классы, но это не так. Все, что у меня есть, это настраиваемые тэги до 20 или более подряд с одинаковыми именами. Если я смогу преобразовать их в массив, это упростит мою работу с ними. Конечно, я мог бы написать свою собственную функцию для анализа информации, но нет ли более простого способа сделать это?

Альтернативные предложения приветствуются, пока я могу получить доступ к данным и сохранить порядок, в котором они были прочитаны (теги представляют собой местоположения данных в форме, которую мне нужно заполнить, поэтому порядок имеет значение).

Так это пользовательские элементы HTML? Вы знаете, что это за элементы раньше? Где они живут? Пример из реального мира поможет легко ответить на этот вопрос.

epascarello 06.06.2018 14:15

Являются ли данные достоверными XML случайно? Или это просто текст? В зависимости от данных ответы могут быть очень простыми или очень сложными. Например, у файла есть заголовки? Например, есть ли строка данных, в которой указано, что используются два тега: tag и othertag?

Shilly 06.06.2018 14:16

Я считаю, что это действительный XML, хотя, когда я попытался проанализировать его как таковой, он дал мне неверную ошибку данных. Я подумал, что будет проще выполнить команду для строки, чтобы вытащить весь тег X в виде массива, затем тег Y, затем Z. Я уже знаю имена тегов.

not_a_generic_user 06.06.2018 14:52
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
49
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете просто использовать метод .each (), чтобы собрать весь текст из каждого настраиваемого тега в массив.

Кроме того, вы можете использовать document.querySelectorAll, чтобы получить список, который затем можно перебирать. Тогда это потребует дополнительной работы, поскольку он также включит тег в массив.

Обратите внимание, что я добавил правило стиля, чтобы все отображалось в отдельных строках.

var tagArr = [];

$('tag').each(function() {
  var text = $(this).text();
  tagArr.push(text);
})
console.info(tagArr); // gives ["dataIwant","dataIwant","dataIwant"]

var otherTagArr = [];

$('otherTag').each(function() {
  var text = $(this).text();
  otherTagArr.push(text);
})
console.info(otherTagArr); //gives gives "moarData","moarData"]
tag,otherTag {display:block}
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<tag>dataIwant</tag>
<tag>dataIwant</tag>
<tag>dataIwant</tag>
<othertag>moarData</othertag>
<othertag>moarData</othertag>

У меня есть данные в строке, поэтому технически я сделал $ (strpage) .find ('tagname'). Each, но это сработало. Это просто и воспроизводимо, поэтому я отмечаю это как ответ.

not_a_generic_user 06.06.2018 14:58

Поэтому, если у вас есть общий родительский элемент, и вы не знаете, какие имена тегов вам нужны, вы можете просмотреть дочерние элементы и вставить их в объект или массивы, используя имя тега.

var wrapper = document.getElementById("wrapper");
var set = Array.from(wrapper.children).reduce( function(o, el){
 o[el.tagName] = o[el.tagName] || [];
 o[el.tagName].push(el.textContent)
 return o
}, {});
console.info(set)
<div id = "wrapper">
  <tag>dataIwant</tag>
  <tag>dataIwant</tag>
  <tag>dataIwant</tag>
  <othertag>moarData</othertag>
  <othertag>moarData</othertag>
</div>

Другие вопросы по теме