将文件代码保存到本地html中下载demo,引入js下载jquery.1.83.min.js看效果。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>jquery实现递归table-tr</title>
<style type="text/css">
/*表格*/
.table{border-collapse: collapse; word-break: keep-all; border:1px solid Black;}
.table.borgray{ border:1px solid #dfdfdf;}
.table th, .table td{border: 0;padding: 5px; font-size:12px;}
.table.borgray th,.table.borgray td{ border:1px solid #dfdfdf;}
.table .th{height: 20px;border: 1px solid windowtext; padding: 0 2pt 0 2pt; background-color: #fff; }
.table .td{border: 1px solid windowtext;}
.table tr.dashed>th,.table tr.dashed>td{ border-style:dashed;}
.table tr.dotted>th,.table tr.dotted>td{ border-style:dotted;}
.table .th.dashed,.table .td.dashed{ border-style:dashed;}
.table .th.dotted,.table .td.dotted{ border-style:dotted;}
.table .td.gray{color: #999;}
.w100 {width: 100%;}
.mag20 {margin: 20px;}
</style>
<script src="jquery-1.8.3.min.js"></script>
<script type="text/javascript">
$(function () {
var $node_array = new Array();
var $tr; var $tr_index; var $td; var $top; var $find_tr
var $level; var $pcpid; var $scpid;
var $t_level; var $t_pcpid; var $t_scpid;
//更换零配件/重新组合零配件
$("#btnchange").live("click", function () {
$tr = $(this).parent().parent(); //btnchange<td<tr
$tr_index = $tr.index();
$td = $(this).parent(); //btnchange>td
$level = $tr.attr("bom-level"); //层级
$pcpid = $tr.attr("bom-pcpid"); //父级ID
$scpid = $tr.attr("bom-scpid"); //当前ID
//恢复所有外框,取消虚线
$(".tbBomItem tbody:first").children('tr').removeClass("dashed"); //.tbBomItem>tbody>tr>td
//待更换配件表格部分外框虚线显示
$tr.addClass("dashed"); //btnchange<td<tr<td
$node_array = new Array();
$node_array.push($tr_index);
FindChildNode($level, $scpid); //递归所有tr子节点,并添加class-dashed
alert("tr-index:" + $node_array);
});
//重置组合
$("#btnreset").live("click", function () {
//恢复外框,取消虚线
$(".tbBomItem tbody:first").children("tr").removeClass("dashed");
});
//递归tr,获取所有子节点并返回tr-index的Array
//level 当前层级
//pcpid 当前scpid
function FindChildNode(level, pcpid) {
var $f_tr = $(".tbBomItem tbody:first").children("tr[bom-level=" + (parseInt(level) + 1) + "][bom-pcpid=" + pcpid + "]");
$f_tr.each(function (i) {
var $f_level = $(this).attr("bom-level"); //当前层级
var $f_scpid = $(this).attr("bom-scpid"); //当前scpid
$(this).addClass("dashed"); //当前行,边框虚线显示
$node_array.push($(this).index());
FindChildNode($f_level, $f_scpid); //递归所有子节点
});
}
});
</script>
</head>
<body>
<pre>
根据bom-scpid,查找所有bom-pcpid=bom-scpid的tr子节点,递归将tr-index写入Array,并返回Array
<tr bom-level="1" bom-pcpid="78618" bom-scpid="78621">BCB3-130矿用隔爆型插销连接器;index:2</tr>
<tr bom-level="2" bom-pcpid="78621" bom-scpid="78622">DXK直变器;index:3</tr>
<tr bom-level="2" bom-pcpid="78621" bom-scpid="78623">DXK控制电源;index:4</tr>
</pre>
<table class="tbBomItem table w100 mag_b20" cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td class="th" colspan="11" align="center">
2.5T蓄电池式电机车
</td>
</tr>
<tr align="center">
<td class="th" style="width: 5%" nowrap="">
序号
</td>
<td class="th" style="width: 5%" nowrap="">
ChildNodes
</td>
<td class="th" style="width: 10%" nowrap="">
BOM类型
</td>
<td class="th" nowrap="">
层级
</td>
<td class="th" style="width: 10%" nowrap="">
产品类型
</td>
<td class="th" nowrap="">
产品名称
</td>
<td class="th" style="width: 10%" nowrap="">
规格型号
</td>
<td class="th" style="width: 10%" nowrap="">
计量单位
</td>
<td class="th" style="width: 10%" nowrap="">
订货数量
</td>
<td class="th" style="width: 10%" nowrap="">
订货单价
</td>
<td class="th" style="width: 10%" nowrap="">
合计
</td>
</tr>
<tr bom-level="1" bom-pcpid="78618" bom-scpid="78621">
<td class="td" nowrap="" align="center">
1
</td>
<td class="td bom-content" style="position: relative; color: #999;" nowrap="" align="center">
<a href="javascript:;" id="btnchange">获取</a>
</td>
<td class="td" nowrap="" align="center">
零部件
</td>
<td class="td" nowrap="" align="center">
1
</td>
<td class="td" nowrap="" align="center">
电器配件
</td>
<td class="td" nowrap="">
BCB3-130矿用隔爆型插销连接器
</td>
<td class="td" nowrap="" align="center">
SPEC
</td>
<td class="td" nowrap="" align="center">
件
</td>
<td class="td" nowrap="" align="center">
1
</td>
<td class="td" nowrap="" align="center">
¥299.00
</td>
<td class="td" nowrap="" align="center">
¥299.00
</td>
</tr>
<tr bom-level="2" bom-pcpid="78621" bom-scpid="78622">
<td class="td" nowrap="" align="center">
2
</td>
<td class="td bom-content" style="position: relative; color: #999;" nowrap="" align="center">
<a href="javascript:;" id="btnchange">获取</a>
</td>
<td class="td" nowrap="" align="center">
零部件
</td>
<td class="td" nowrap="" align="center">
2
</td>
<td class="td" nowrap="" align="center">
电器配件
</td>
<td class="td" nowrap="">
DXK直变器
</td>
<td class="td" nowrap="" align="center">
SPEC
</td>
<td class="td" nowrap="" align="center">
件
</td>
<td class="td" nowrap="" align="center">
1
</td>
<td class="td" nowrap="" align="center">
¥199.00
</td>
<td class="td" nowrap="" align="center">
¥199.00
</td>
</tr>
<tr bom-level="2" bom-pcpid="78621" bom-scpid="78623">
<td class="td" nowrap="" align="center">
3
</td>
<td class="td bom-content" style="position: relative; color: #999;" nowrap="" align="center">
<a href="javascript:;" id="btnchange">获取</a>
</td>
<td class="td" nowrap="" align="center">
零部件
</td>
<td class="td" nowrap="" align="center">
2
</td>
<td class="td" nowrap="" align="center">
电器配件
</td>
<td class="td" nowrap="">
DXK控制电源
</td>
<td class="td" nowrap="" align="center">
SPEC
</td>
<td class="td" nowrap="" align="center">
件
</td>
<td class="td" nowrap="" align="center">
1
</td>
<td class="td" nowrap="" align="center">
¥100.00
</td>
<td class="td" nowrap="" align="center">
¥100.00
</td>
</tr>
<tr>
<td class="td" colspan="2" align="center">
<a href="javascript:;" id="btnreset">重置Table</a>
</td>
<td class="td" colspan="8" align="left">
</td>
<td class="td" align="center">
<label id="lblTotalPrice">
¥299.00
</label>
</td>
</tr>
</tbody>
</table>
</body>
</html>