如何将所有已命名的HTML标记拉入数组?

时间:2018-06-06 12:13:09

标签: javascript jquery

我有一个页面,其中包含我需要以

格式解析的数据
<tag>dataIwant</tag>
<tag>dataIwant</tag>
<tag>dataIwant</tag>
<othertag>moarData</othertag>
<othertag>moarData</othertag>

为简单起见,我想将所有任何命名标记的集合提取为数组(最好只是值)。例如:

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

使用jQuery IF很容易提取它们,因为它们被命名为元素或者有类,但它们没有。我所拥有的是具有相同名称的最多20个或更多的自定义标记名。如果我可以将它们转换为数组,它将简化我的工作。我当然可以编写自己的函数来解析信息,但有没有更简单的方法来做到这一点?

欢迎使用替代建议,只要我能够获取数据并保留其读取顺序(标签代表我需要填写的表格上的数据位置,以便订购事宜)。

2 个答案:

答案 0 :(得分:1)

您可以使用.each()方法将每个自定义标记中的所有文本收集到数组中。

此外,您可以使用document.querySelectorAll获取可以迭代的列表。这将需要更多的工作,因为它也会在数组中包含标记。

请注意,我添加了一个样式规则,以便全部显示在不同的行中。

var tagArr = [];

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

var otherTagArr = [];

$('otherTag').each(function() {
  var text = $(this).text();
  otherTagArr.push(text);
})
console.log(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>

答案 1 :(得分:0)

因此,如果您有一个共同的父级,并且您不知道您所使用的标记名称,则可以查看这些子项并使用标​​记名称将它们推送到一个或多个对象中。

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.log(set)
<div id="wrapper">
  <tag>dataIwant</tag>
  <tag>dataIwant</tag>
  <tag>dataIwant</tag>
  <othertag>moarData</othertag>
  <othertag>moarData</othertag>
</div>