0
我有它相當接近,但秩序是錯的。輸出此刻全亂了,我似乎不能將所有行添加到陣列如何從表中提取所有輸入「<select>」並填充數組?
$('#clicker').on('click', function (e) {
var tableToObj = function (table) {
var trs = table.rows,
trl = trs.length,
i = 0,
j = 0,
keys = [],
obj, ret = [];
// j += 1;
for (; i < trl; i++) {
if (i == 0) {
for (; j < trs[i].children.length; j++) {
var sel = $(trs[i].children[j]).find("select");
if (sel.length == 0) {
keys.push(trs[i].children[j].innerHTML);
} else {
keys.push(sel.val());
}
}
} else {
obj = {};
for (j = 0; j < trs[i].children.length; j++) {
var sel = $(trs[i].children[j]).find("select");
if (sel.length == 0) {
obj[keys[j]] = trs[i].children[j].innerHTML;
} else {
keys.push(sel.val());
}
}
ret.push(obj);
}
}
return ret;
};
document.getElementById('r').innerHTML = JSON.stringify(tableToObj(document.getElementsByTagName('table')[0]));
});
});
我的HTML,我使用的是以下幾點:
<table>
<tr><td>FirstColumn</td><td>SecondColumn</td><td>ThirdColumn</td></tr>
<tr><td><select><option value="tr1">tr1</option><option value="tr2">tr2</option><option value="tr3">tr3</option><option value="tr4">tr4</option></select></td><td>1</td><td><select><option value="tr1">tr1</option><option value="tr2">tr2</option><option value="tr3">tr3</option></select></td></tr>
<tr><td>tr3 row</td><td></td><td><select><option value="tr1">tr1</option><option value="tr2">tr2</option><option value="tr3">tr3</option><option value="tr4">tr4</option></select></td></tr>
<tr><td>tr4 row</td><td></td><td></td></tr>
<tr><td>0</td><td>1</td><td>0</td></tr>
<tr><td>0</td><td>1</td><td>0</td></tr>
</table>
<button id="clicker">Button</button>
<br />
Result:
<div id="r"></div>
這裏是輸出我得到:
[{"SecondColumn":"1"},{"FirstColumn":"tr3 row","SecondColumn":""},{"FirstColumn":"tr4 row","SecondColumn":"","ThirdColumn":""},{"FirstColumn":"0","SecondColumn":"1","ThirdColumn":"0"},{"FirstColumn":"0","SecondColumn":"1","ThirdColumn":"0"}]
這並不在改變選擇value.I'm非常有信心的問題,改變的是withen內的VAR SEL for循環。
感謝