例如以下HTML
<tr class="jtable-row-even jtable-row-selected">
<td class="jtable-selecting-column">
<input type="checkbox" checked="checked"/>
</td>
<td class="">01010004</td>
<td class="">一次性注射器</td>
<td class="">10ml</td>
</tr>
要转换成 {"ID":"01010004","Name":"一次性注射器","Specification":"10ml"} 进行存储
有什么插件或者思路
补充如下:
HTML结构:
<!-- table -->
<div id="businessData-filter-table" class="tableStyle-2">
<!-- container -->
<div class="tableStyle-2-container">
<div id="bft-rootOperator" class="tableStyle-2-operator" operator="1">且</div>
<div id="bft-rootContainer" class="tableStyle-2-content">
<div class="tableStyle-2-container">
<div class="tableStyle-2-operator" operator="2">或</div>
<div class="tableStyle-2-content">
<div class="tableStyle-2-container">
<div class="tableStyle-2-operator" operator="1">且</div>
<div class="tableStyle-2-content">
<ul class="tableStyle-2-content-list">
<li class="tableStyle-2-content-list-unitRow">
<label class="unitRow-label">沈阳</label>
<div class="unitRow-condition">
<select name="unitRow-condition" class="select2 selectCondition">
<option value="1">属于</option>
<option value="2">不属于</option>
<option value="3" selected="selected">包含</option>
<option value="4">不包含</option>
<option value="5">为空</option>
<option value="6">非空</option>
<option value="7">开头是</option>
<option value="8">结尾是</option>
</select>
</div>
<div class="unitRow-editRange">
<input type="text" name="unitRow-editRange" class="editRange">
</div>
<div class="operationBar">
<i class="add" action="addListUnitRowEditBox"></i>
<i class="del" action="delListUnitRow"></i>
</div>
</li>
<li class="tableStyle-2-content-list-unitRow">
<label class="unitRow-label">重庆</label>
<div class="unitRow-condition">
<select name="unitRow-condition" class="select2 selectCondition">
<option value="1">属于</option>
<option value="2" selected="selected">不属于</option>
<option value="3">包含</option>
<option value="4">不包含</option>
<option value="5">为空</option>
<option value="6">非空</option>
<option value="7">开头是</option>
<option value="8">结尾是</option>
</select>
</div>
<div class="unitRow-pickRange">
<select name="unitRow-pickRange" class="select2 selectPickRange">
<option value="1" selected="selected">属于</option>
<option value="2">不属于</option>
<option value="3">包含</option>
<option value="4">不包含</option>
<option value="5">为空</option>
<option value="6">非空</option>
<option value="7">开头是</option>
<option value="8">结尾是</option>
</select>
</div>
<div class="operationBar">
<i class="add" action="addListUnitRowEditBox"></i>
<i class="del" action="delListUnitRow"></i>
</div>
</li>
<li class="tableStyle-2-content-list-unitRow">
<label class="unitRow-label">西安</label>
<div class="unitRow-condition">
<select name="unitRow-condition" class="select2 selectCondition">
<option value="1" selected="selected">属于</option>
<option value="2">不属于</option>
<option value="3">包含</option>
<option value="4">不包含</option>
<option value="5">为空</option>
<option value="6">非空</option>
<option value="7">开头是</option>
<option value="8">结尾是</option>
</select>
</div>
<div class="unitRow-pickRange">
<select name="unitRow-pickRange" class="select2 selectPickRange">
<option value="1">属于</option>
<option value="2">不属于</option>
<option value="3">包含</option>
<option value="4">不包含</option>
<option value="5" selected="selected">为空</option>
<option value="6">非空</option>
<option value="7">开头是</option>
<option value="8">结尾是</option>
</select>
</div>
<div class="operationBar">
<i class="add" action="addListUnitRowEditBox"></i>
<i class="del" action="delListUnitRow"></i>
</div>
</li>
</ul>
</div>
</div>
<ul class="tableStyle-2-content-list">
<li class="tableStyle-2-content-list-unitRow">
<label class="unitRow-label">广州</label>
<div class="unitRow-condition">
<select name="unitRow-condition" class="select2" style="width: 100%">
<option value="1">属于</option>
<option value="2">不属于</option>
<option value="3">包含</option>
<option value="4" selected="selected">不包含</option>
<option value="5">为空</option>
<option value="6">非空</option>
<option value="7">开头是</option>
<option value="8">结尾是</option>
</select>
</div>
<div class="unitRow-pickRange">
<select name="unitRow-pickRange" class="select2" style="width: 100%">
<option value="1">属于</option>
<option value="2">不属于</option>
<option value="3">包含</option>
<option value="4">不包含</option>
<option value="5">为空</option>
<option value="6">非空</option>
<option value="7" selected="selected">开头是</option>
<option value="8">结尾是</option>
</select>
</div>
<div class="operationBar">
<i class="add" action="addListUnitRowEditBox"></i>
<i class="del" action="delListUnitRow"></i>
</div>
</li>
<li class="tableStyle-2-content-list-unitRow">
<label class="unitRow-label">深圳</label>
<div class="unitRow-condition">
<select name="unitRow-condition" class="select2" style="width: 100%">
<option value="1">属于</option>
<option value="2">不属于</option>
<option value="3">包含</option>
<option value="4">不包含</option>
<option value="5">为空</option>
<option value="6">非空</option>
<option value="7">开头是</option>
<option value="8" selected="selected">结尾是</option>
</select>
</div>
<div class="unitRow-pickRange">
<select name="unitRow-pickRange" class="select2" style="width: 100%">
<option value="1">属于</option>
<option value="2">不属于</option>
<option value="3">包含</option>
<option value="4">不包含</option>
<option value="5" selected="selected">为空</option>
<option value="6">非空</option>
<option value="7">开头是</option>
<option value="8">结尾是</option>
</select>
</div>
<div class="operationBar">
<i class="add" action="addListUnitRowEditBox"></i>
<i class="del" action="delListUnitRow"></i>
</div>
</li>
</ul>
</div>
</div>
<!-- container -->
<ul class="tableStyle-2-content-list">
<li class="tableStyle-2-content-list-unitRow">
<label class="unitRow-label">长春</label>
<div class="unitRow-condition">
<select name="unitRow-condition" class="select2" style="width: 100%">
<option value="1">属于</option>
<option value="2" selected="selected">不属于</option>
<option value="3">包含</option>
<option value="4">不包含</option>
<option value="5">为空</option>
<option value="6">非空</option>
<option value="7">开头是</option>
<option value="8">结尾是</option>
</select>
</div>
<div class="unitRow-pickRange">
<select name="unitRow-pickRange" class="select2" style="width: 100%">
<option value="1">属于</option>
<option value="2">不属于</option>
<option value="3">包含</option>
<option value="4">不包含</option>
<option value="5" selected="selected">为空</option>
<option value="6">非空</option>
<option value="7">开头是</option>
<option value="8">结尾是</option>
</select>
</div>
<div class="operationBar">
<i class="add" action="addListUnitRowEditBox"></i>
<i class="del" action="delListUnitRow"></i>
</div>
</li>
<li class="tableStyle-2-content-list-unitRow">
<label class="unitRow-label">上海</label>
<div class="unitRow-condition">
<select name="unitRow-condition" class="select2" style="width: 100%">
<option value="1">属于</option>
<option value="2">不属于</option>
<option value="3" selected="selected">包含</option>
<option value="4">不包含</option>
<option value="5">为空</option>
<option value="6">非空</option>
<option value="7">开头是</option>
<option value="8">结尾是</option>
</select>
</div>
<div class="unitRow-pickRange">
<select name="unitRow-pickRange" class="select2" style="width: 100%">
<option value="1" selected="selected">属于</option>
<option value="2">不属于</option>
<option value="3">包含</option>
<option value="4">不包含</option>
<option value="5">为空</option>
<option value="6">非空</option>
<option value="7">开头是</option>
<option value="8">结尾是</option>
</select>
</div>
<div class="operationBar">
<i class="add" action="addListUnitRowEditBox"></i>
<i class="del" action="delListUnitRow"></i>
</div>
</li>
</ul>
</div>
</div>
<!-- container -->
</div>
<!-- table -->
JS方法如下:(采用jQuery)
function getFilterTableData(tableID) {
var operatorMap = {
1: 'AND',
2: 'OR'
};
var conditionAndRangeMap = {
condition: function($obj) {
return $obj.children('select').val()
},
pickRange: function($obj) {
return {
val: $obj.children('select').val(),
mode: 'select'
}
},
editRange: function($obj) {
return {
val: $obj.children('input').val(),
mode: 'input'
}
},
nullRange: function($obj) {
return
}
};
var c = '.tableStyle-2-container',
h = '.tableStyle-2-operator',
b = '.tableStyle-2-content',
l = '.tableStyle-2-content-list',
li = '.tableStyle-2-content-list-unitRow',
label = '.unitRow-label';
var result = {};
var $start = $(tableID).children();
var looper = function($c, data) {
var $unitH = $c.children(h), //操作符
$unitB = $c.children(b), //内容
$unitB_children = $unitB.children(); //内容子节点
//如果有操作符
if($unitH.length) {
data.type = operatorMap[$unitH.attr('operator')];
}
//存储子节点信息
data.children = [];
//如果内容有子节点
if($unitB_children.length) {
var $unitL = $unitB.children(l); //内容 - 列表
var $unitC = $unitB.children(c); //内容 - 容器
if($unitL.length) {
var children = [];
var $lis = $unitL.children(li);
for(var i = 0, length = $lis.length; i < length; i++) {
var $label = $lis.eq(i).children(label);
var $condition = $label.next();
var $range = $condition.next();
var unitRowData = $.extend({
col: $label.text()
}, {
rel: conditionAndRangeMap[$condition.attr('class').split('-')[1]]($condition),
}, conditionAndRangeMap[$range.attr('class').split('-')[1]]($range));
children.push(unitRowData);
}
data.children.push({
children: children
});
}
if($unitC.length) {
data.children.unshift({});
looper($unitC, data.children[0]);
}
}
}
looper($start, result);
return result
}
var resultData = getFilterTableData('#businessData-filter-table');
console.log(JSON.stringify(resultData));
我觉得你这个数据给不得完整,因为你没给列头数据,从你的信息来看,我估计表格应该是这样的
首先,你得找到列序号与表头(列名称)的关系
如果实在没有列头,也可以手工写一个映射关系出来
现在来遍历表格的每一行(除标题行),把每一行转换成一个对象
其中
convertToModel
用于把一个 tr 的 jQuery 对象转换成模型,那么这个函数该怎么写呢?最后是 jfiddle 上的示例
https://jsfiddle.net/w7rcuw8r/1/