如何从一个元素内的元素获取数据 - Javascript

问题描述 投票:0回答:2

我想从HTML元素中获取一些数据。数据重复。想象一下调查页面,显示许多问题的结果:

这是我的每个问题的信息的主要元素容器的示例:enter image description here

每个“div”元素都是一个容器。在里面我可以找到元素“div,tr,td”等。我想创建一个脚本来浏览每个容器并获取相同的数据:如问题编号,问题文本,响应选项文本,值等。

enter image description here

这是我到目前为止尝试的内容:

var title = $('.sm-question-view').contents().find('.sm-question-number');

我的目的是在其中一个容器“sm-question-view”中获取sm-question-number,但我得到了页面中所有“sm-question-number”的列表。由于我打算每个问题以csv格式存储数据,因此对我来说管理起来更加困难。

我也只尝试过:

var title = $('.sm-question-view');

title检索对象,我可以通过它来查找所有项目,但导航也很复杂,因为我需要通过很多元素来获取我想要的最终文本。

我心中的逻辑可以用这个伪代码表示:

对于每个容器:

csv_string = Find(question-number).text;

csv_string + = Find(question-title).text;

csv_string + = Find(question-view-sub-header).text;

csv_string + = Find(label-txt-shadow-it).text;

当然,这个伪代码只是我想要实现的内容的简要表示。有什么想法吗?我将继续阅读“find()”的用法,但感谢任何帮助。

谢谢

javascript jquery html
2个回答
0
投票

你的伪代码实际上是正确的:

const wrapper = $('.sm-question-view');

let csv_string = '';
wrapper.each(function() {
  csv_string =  $(this).find(number).text() + ',';
  csv_string += $(this).find(title).text() + ',';
  csv_string += $(this).find(view - sub - header).text() + ',';
  csv_string += $(this).find(label - txt - shadow - it).text() + ',';
  csv_string += '\n';
});

现在用你的选择器替换.find()中的值。

如果你不熟悉.find(),可以这样想:它确实与$(…)完全相同,只是它只搜索其他元素。

另请注意,您需要.each(),因为您实际上需要连续使用相同元素的更多方法。


0
投票

我的建议是为你需要检索的每一点信息添加一个类(即sm-question-number,sm-question-title,...)

然后,您可以通过以下代码循环查看您的问题列表:

$('.sm-question-view').each(function(index, el) { // loop through each question
    const title = $(this).children('.sm-question-title').text();
    // this points to the current question that is looping
    // find() function search through the element's descendant to find the class
});
© www.soinside.com 2019 - 2024. All rights reserved.