Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
遍历javascript中的多维元素_Javascript_Html - Fatal编程技术网

遍历javascript中的多维元素

遍历javascript中的多维元素,javascript,html,Javascript,Html,我试图通过HTML循环获取内容并将其放入JSON文件中 我有这个HTML: <div class="main"> <div class="results"> <div class="name">joan</div> <div class="age">32</div> </div> <div class="results"> <div class="name

我试图通过HTML循环获取内容并将其放入JSON文件中

我有这个HTML:

<div class="main">

  <div class="results">
    <div class="name">joan</div>
    <div class="age">32</div>
  </div>

  <div class="results">
    <div class="name">Sam</div>
    <div class="age">35</div>
  </div>

  <div class="results">
    <div class="name">joo</div>
    <div class="age">32</div>
  </div>

</div>
我尝试使用此JavaScript结构使其工作,但不起作用:

Array.from(document.getElementsByClassName("results")).forEach(
  function(element, index, array) {
    var  data = $('.name, .age').text();
    console.log(data);
  });

有什么想法吗?

没有jQuery,只有简单的javascript,而且速度非常快,你可以做这么简单的事情

对初始对象的键使用
索引
,然后创建另一个具有
名称
/
年龄
的键,并将其指定为其值

注意,由于较新的浏览器现在支持
nodeList
上的
forEach
,我同意了这一点,尽管为较旧的浏览器添加了第二个
for…loop
,这可能会更快:)

堆栈片段

var data={};
document.queryselectoral(“.results”).forEach(函数(el,idx){
数据[idx+1]={
“名称”:el.children[0].textContent,
“年龄”:el.children[1]。文本内容
};
});
控制台日志(数据)

琼
32
山姆
35
乔
32

以下是三种解决方案,可通过以下方式达到预期效果:

  • jQuery
  • ECMAScript 6
  • 普通JavaScript
以及将数据结构更改为数组的建议,这将使以后更易于使用


jQuery解决方案 您可以用所需内容填充新对象
res

使用jQuery方法在
.results
元素之间循环:

.each(函数)

函数
:函数(整数
索引
,元素
元素

为每个匹配元素执行的函数

然后获取
.results
的子项:
.name
.age
的文本内容

let res={};
$(“.results”)。每个(函数(索引,元素){
常量[name,age]=[$(this).children('.name').text(),$(this.children('.age').text());
res[index]={name,age}
});
console.log(res)
。作为控制台包装{最大高度:100%!重要;顶部:0;}

琼
32
山姆
35
乔
32

这是我的解决方案,用纯javascript试试

var数据=[]//声明一个obj容器
var objresults=document.getElementsByClassName(“结果”)//获取结果的类元素
for(设i=0;i

琼
32
山姆
35
乔
32

虽然此代码片段可能是解决方案,但它确实有助于提高文章的质量。请记住,您将在将来回答读者的问题,而这些人可能不知道您的代码建议的原因。我刚刚开始回答这里的问题,我只关注解决方案,没有考虑读者的观点。我会确保,我会在我的回答中包括一个解释,我感谢你的反馈,这是一个伟大的分享@Ivan!毫无疑问,这是最好的!我很高兴能帮上忙;)您的第三个解决方案非常有效,但当我尝试使用
.getAttribute
获取图像源代码时,得到的输出值为空。有什么想法吗?@Gad是普通的JavaScript吗?您在哪里使用
img
元素?我想你还有第三个孩子在里面,是吗?如果你使用的是
数组。从
开始,你最好使用
map
,而不是手动构建数组。@Aankhen刚刚决定使用w/o,因为现在所有最新的浏览器都支持
节点列表上的
forEach
,这很酷。我今天学到了一些新东西!不过,您可能想添加一个关于兼容性的注释。@Aankhen刚刚添加了……也许这一新的酷学足以让您投票支持;)伟大的好了。非常感谢你的贡献,我真的很感激。很抱歉没有给你投票,我现在给你投票了,谢谢。听起来很好,谢谢
Array.from(document.getElementsByClassName("results")).forEach(
  function(element, index, array) {
    var  data = $('.name, .age').text();
    console.log(data);
  });
var array = [];
$('.results').each(function(index, value) {
    array.push({
        "name": value.children[0].innerText,
        "age": value.children[1].innerText
    });
});
// the required result
var finalObject = JSON.stringify(array);