我需要遍历HTML表格并使用javascript以特定方式获取值。
我的表格如下:
<table>
<tr>
<td class="name">Henk</td>
<td class="day">tuesday</td>
<td>text</td>
<td>text</td>
<td>text</td>
<td>text</td>
<td></td>
<td id="number_2">667</td>
</tr>
<tr>
<td class="name">Jill</td>
<td class="day">monday</td>
<td>text</td>
<td>text</td>
<td>text</td>
<td>text</td>
<td>text</td>
<td id="number_5">77</td>
</tr>
<tr>
<td class="name">Joe</td>
<td class="day">wednesday</td>
<td>text</td>
<td>text</td>
<td></td>
<td></td>
<td></td>
<td id="number_1">112</td>
</tr>
<tr>
<td class="name">Henk</td>
<td class="day">monday</td>
<td>text</td>
<td>text</td>
<td>text</td>
<td>text</td>
<td>text</td>
<td id="number_3">345</td>
</tr>
<tr>
<td class="name">Joe</td>
<td class="day">friday</td>
<td>text</td>
<td>text</td>
<td>text</td>
<td></td>
<td></td>
<td id="number_4">332</td>
</tr>
</table>
我需要收集的是:
Henk,345,667,0,0,0
Jill,77,0,0,0,0
Joe,0,0,112,0,332
这些名字只需要收集一次,然后拿起这个人在号码单元格中列出的号码的日期,将按工作日(星期一至星期五)排序。没有数字的日子可以填写&#39; 0&#39;
该表格将生成,可以是任何长度和任何特定顺序。因此,如果我要刷新页面,可以更改行顺序(例如,将Jill,77放在第一行)。表和内容是使用PHP生成的,但是数字单元格由javascript填充。之后,将按下一个按钮以使用javascript导出数据。然后,它将用作csv文件的输入。 在导出中,&#39;文本&#39;值被忽略。
我似乎无法获得正确的循环。我怎样才能用javascript实现这个目标?
编辑:我没有示例代码,因为我尝试的所有内容都无法提供正确的结果。
答案 0 :(得分:2)
在表格中添加一个ID,例如:tbl1。 然后:
$(function(){
$('#tbl1 tr').each(function() {
$( this ).find('td').each(function() {
console.log($(this).html());
});
});
});
答案 1 :(得分:0)
你可以这样做,
var data = {},
res = '',
days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday'];
$('table tr').each(function() {
// iterate all tr using each()
var $this = $(this),
name = $this.find('td:first-child').text();
// getting name from first column
if (!data[name])
// checking object added or not , if not then creating object with name and 0 valued array
data[name] = [0, 0, 0, 0, 0];
data[name][days.indexOf($this.find('td.day').text())] = $this.find('td[id^="number_"]').text();
// finding number and inserting it based on day
});
$.each(data, function(i, v) {
// iterating object using $.each
res += i + ',' + v.join() + '\n';});
// generating prefered string
alert(res);
console.log(res);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table>
<tr>
<td class="name">Henk</td>
<td class="day">tuesday</td>
<td>text</td>
<td>text</td>
<td>text</td>
<td>text</td>
<td></td>
<td id="number_2">667</td>
</tr>
<tr>
<td class="name">Jill</td>
<td class="day">monday</td>
<td>text</td>
<td>text</td>
<td>text</td>
<td>text</td>
<td>text</td>
<td id="number_5">77</td>
</tr>
<tr>
<td class="name">Joe</td>
<td class="day">wednesday</td>
<td>text</td>
<td>text</td>
<td></td>
<td></td>
<td></td>
<td id="number_1">112</td>
</tr>
<tr>
<td class="name">Henk</td>
<td class="day">monday</td>
<td>text</td>
<td>text</td>
<td>text</td>
<td>text</td>
<td>text</td>
<td id="number_3">345</td>
</tr>
<tr>
<td class="name">Joe</td>
<td class="day">friday</td>
<td>text</td>
<td>text</td>
<td>text</td>
<td></td>
<td></td>
<td id="number_4">332</td>
</tr>
</table>
答案 2 :(得分:0)
这是一个使用Jquery“each”并在json中格式化数据的简单方法。
/* json formatted data */
var data = [
{"id":"1","name":"Henk","day":"Friday"},
{"id":"2","name":"Jill","day":"Monday"},
{"id":"3","name":"Joe","day":"Saturday"}
];
$(document).ready(function(){
var html='';
if(data != null){
$.each(data,function(i,val){
var id = val.id,
name = val.name,
day = val.day;
html+='<tr> \
<th scope="row" id="number_'+id+'">'+id+'</th> \
<td>'+name+'</td> \
<td>'+day+'</td> \
<td>text</td> \
</tr>';
});
$(html).appendTo('.results');
}else{
html='';
alert('No data available');
$('.results').empty();
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table>
<thead>
<tr>
<th>#ID</th>
<th>Name</th>
<th>Day</th>
<th> - - - </th>
</tr>
</thead>
<tbody class="results">
</tbody>
</table>
答案 3 :(得分:0)
这里有一些js(带有jquery)吐出所需的输出:
Henk: 345, 667, 0, 0, 0
Jill: 77, 0, 0, 0, 0
Joe: 112, 332, 0, 0, 0
提供的html结构。
var people = {};
$.each($('table').children().children(), function(index, value) {
var thisElement = $(value).children();
var thisName = $(thisElement[0]).text()
, thisValue = parseInt($(thisElement[7]).text());
if(typeof people[thisName] === "undefined") {
people[thisName] = [0, 0, 0, 0, 0];
people[thisName][0] = thisValue;
} else {
for(index = 0; index < 5; index ++) {
var curValue = people[thisName][index];
if(curValue == 0 || curValue > thisValue) {
people[thisName][index] = thisValue;
thisValue = curValue;
}
}
}
});
for(index in people) {
console.log(index + ',' + people[index]);
}
答案 4 :(得分:0)
我把表格给了#34;表&#34;然后我这样做了:
var tbody = document.getElementById("table").children;
var array = new Array();
var aux_name, aux_number;
for( var i = 0; i < tbody.item(0).children.length ; i++){
if(tbody.item(0).children[i] != undefined){
aux_name = tbody.item(0).children[i].children[0].innerText;
array[aux_name] = "";
}
}
for( var i = 0; i < tbody.item(0).children.length ; i++){ // tr
if(tbody.item(0).children[i] != undefined)
{
aux_name = tbody.item(0).children[i].children[0].innerText;
aux_number = tbody.item(0).children[i].children[7].innerText;
if(array[aux_name] != 0){
var aux_new_value = array[aux_name].concat(", " + aux_number);
array[aux_name] = aux_new_value;
} else {
array[aux_name] = aux_number;
}
fillArray(array, aux_name);
}
}
function fillArray(array, except){
for( var i = 0 ; i < Object.keys(array).length ; i++){
if(Object.keys(array)[i] != except){
array[Object.keys(array)[i]] = array[Object.keys(array)[i]] == "" ? array[Object.keys(array)[i]].concat("0") : array[Object.keys(array)[i]].concat(", 0");
}
}
}
console.log(array);
希望它有所帮助。
答案 5 :(得分:0)
解决方案非常简单,您所要做的就是:
id
替换数字td
中的class
来更改HTML代码,以便解析更加简单。persons
数组,用于容纳所有人。循环遍历names
数组,然后遍历每个name
:
name, points
)。name
属性分配给此person
对象。name
时,都会获取找到的天数并使用相关数字更新点数组。最后只需打印所需的输出,如下面的DEMO所示。
var table = $('table')[0];
console.log(table.rows);
var persons = [];
var names = [];
var days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];
$('table#myTable tr').each(function() {
var row = $(this);
var name = row.find('td.name').html();
if ($.inArray(name, names) === -1) {
names.push(name);
}
});
for (var i = 0; i < names.length; i++) {
var name = names[i];
var person = {};
person.name = name;
var points = [0, 0, 0, 0, 0, 0];
$('table#myTable tr').each(function() {
var row = $(this);
var nameInTd = row.find('td.name').html();
var dayInTd = row.find('td.day').html();
if (name === nameInTd) {
for (day in days) {
if (days[day] === dayInTd) {
points[day] = row.find('td.number').html();
}
}
}
});
person.points = points;
$("#output").html($("#output").html() + person.name + ", " + person.points.join(", ") + "<br>");
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="myTable">
<tr>
<td class="name">Henk</td>
<td class="day">tuesday</td>
<td>text</td>
<td>text</td>
<td>text</td>
<td>text</td>
<td></td>
<td class="number">667</td>
</tr>
<tr>
<td class="name">Jill</td>
<td class="day">monday</td>
<td>text</td>
<td>text</td>
<td>text</td>
<td>text</td>
<td>text</td>
<td class="number">77</td>
</tr>
<tr>
<td class="name">Joe</td>
<td class="day">wednesday</td>
<td>text</td>
<td>text</td>
<td></td>
<td></td>
<td></td>
<td class="number">112</td>
</tr>
<tr>
<td class="name">Henk</td>
<td class="day">monday</td>
<td>text</td>
<td>text</td>
<td>text</td>
<td>text</td>
<td>text</td>
<td class="number">345</td>
</tr>
<tr>
<td class="name">Joe</td>
<td class="day">friday</td>
<td>text</td>
<td>text</td>
<td>text</td>
<td></td>
<td></td>
<td class="number">332</td>
</tr>
</table>
<h4>This is the result</h4>
<p id="output">
</p>
&#13;
这是JavaScript代码:
var table = $('table')[0];
console.log(table.rows);
var persons = [];
var names = [];
var days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];
$('table#myTable tr').each(function() {
var row = $(this);
var name = row.find('td.name').html();
if ($.inArray(name, names) === -1) {
names.push(name);
}
});
for (var i = 0; i < names.length; i++) {
var name = names[i];
var person = {};
person.name = name;
var points = [0, 0, 0, 0, 0, 0];
$('table#myTable tr').each(function() {
var row = $(this);
var nameInTd = row.find('td.name').html();
var dayInTd = row.find('td.day').html();
if (name === nameInTd) {
for (day in days) {
if (days[day] === dayInTd) {
points[day] = row.find('td.number').html();
}
}
}
});
person.points = points;
$("#output").html($("#output").html() + person.name + ", " + person.points.join(", ") + "<br>");
}