我想出了将html表数据存储到2D数组的问题。我没有使用嵌套循环,而是在寻找允许我这样做的jquery函数。我发现this method似乎可以完成这项工作。
var tRows = $('tr').map(function() {
return [$(this).find('td').map(function() {
return $(this).text()
}).get()]
}).get()
console.log(tRows)
我想知道,如何在给定代码中使用条件来检查
td
的第一个tr
是否为空(或者一般的其他一些条件)因此不会将该行添加到最终数组。
修改
阅读评论并以this fiddle为基础,我现在有了
var tRows = $('tr').map(function() {
var arr = $(this).find('td').map(function() {
return $(this).text()
}).get();
if (arr[0].length) return[arr];
}).get()
这有点工作,但我希望检查内部映射中的条件并返回NULL而不是整个数组。从discussion here开始,似乎无法中途中止内部地图调用,它将返回整个数组。看起来像循环可能会更好地完成这项工作,还是我错过了什么?
答案 0 :(得分:0)
假设您发布的代码适合您......
如果您希望每行的第一个.text
的{{1}}不为空,则可以使用CSS选择器组合。
修改强>
好的......我改进了一点
好像在空td
中可以有一些空格...
所以我使用td
来测试它。
以下是我使用的新内容:
:first
.test()
JavaScript方法
.trim()
JavaScript方法
我尝试过的 CodePen 。
regex
此返回:$(document).ready(function(){
console.clear();
console.log("loading...");
var tRows = $('tr').map(function() {
return [$(this).find('td:first').map(function() {
var pattern = /^\s+$/;
if($(this).text()!="" && !pattern.test($(this).text())){
return $(this).text().trim();
}
}).get()]
}).get()
console.log(tRows)
});
,在CodePen中...
如果你不想让空的那个在中间:
第二个CodePen
[["blah1],[],[blah7]]
此回复:$(document).ready(function(){
console.clear();
console.log("loading...");
var tRows = $('tr').map(function() {
var arr = [$(this).find('td:first').map(function() {
var pattern = /^\s+$/;
if($(this).text()!="" && !pattern.test($(this).text())){
return $(this).text().trim();
}
}).get()];
if(arr[0]!=""){
return arr;
}
}).get()
console.log(tRows)
});
[["blah1],[blah7]]
这也会返回:$(document).ready(function(){
console.clear();
console.log("loading...");
var arr=[];
var counter=0;
$('tr').each(function() {
var thisTDtext = [$(this).find("td").first().text().trim()];
if(thisTDtext!=""){
arr[counter] = thisTDtext;
counter++;
}
});
console.log(JSON.stringify(arr));
});