我有一张如下表
<table>
<tr data-depth="0" class="expand level0">
<td>VR [ <a class="link">2147483646 </a>]
</td>
</tr>
<tr data-depth="1" class="expand level1">
<td>Business & Industrial [ <a class="link">12576 </a>]
</td>
</tr>
<tr data-depth="2" class="expand level2">
<td>Healthcare, Lab & Life Science [ <a class="link">11815
</a>]
</td>
</tr>
<tr data-depth="3" class="expand level3">
<td>Imaging & Aesthetics Equipment [ <a class="link">92036
</a>]
</tr>
<tr data-depth="2" class="expand level2">
<td>Heavy Equipment [ <a class="link">177641 </a>]
</td>
</tr>
<tr data-depth="3" class="expand level3">
<td>Forklifts [ <a class="link">97185 </a>]
</tr>
<tr data-depth="2" class="expand level2">
<td>Printing & Graphic Arts [ <a class="link">26238 </a>]
</td>
</tr>
<tr data-depth="3" class="expand level3">
<td>Commercial Printing Presses [ <a class="link">26247 </a>]
</td>
</tr>
<tr data-depth="2" class="expand level2">
<td>Restaurant & Catering [ <a class="link">11874 </a>]
</td>
</tr>
<tr data-depth="3" class="expand level3">
<td>Concession Trailers & Carts [ <a class="link">67145 </a>]
</td>
</tr>
</table>
我想用data-depth =(这个tr数据深度)得到最接近的行 - 1
我无法找到使用this.closest('tr')和attr('data-depth')= this.attr('data-depth') - 1的方法。
答案 0 :(得分:2)
这样的东西?
JS:
$('a').click(function(){
var depth = $(this).closest('tr').attr('data-depth')-1;
var item = $(this).closest('table').find('tr[data-depth='+depth+']');
// item is your object
});
答案 1 :(得分:1)
我建议您添加一些内容,以便将子行与其父行相关联。也许通过为每行提供一个id,然后添加一个data-parent-id属性。这将使它更容易使用。但是,假设您无法做到这一点,那么这样的东西应该能够获得树中父级的单行:
$('a').click(function(){
var parentRow = $(this).closest('tr');
var depth = parentRow.attr('data-depth')-1;
var parentNode = parentRow.siblings(':lt(' + parentRow.index() + ')').filter('[data-depth=' + depth + ']').last();
//parentNode now is the row of the tree-parent of the row that was clicked
});
这样做首先抓住所有被点击的行的兄弟姐妹,其索引小于单击的行(因为树中的父节点将始终位于子节点之前)。然后,它将该列表过滤为仅具有比单击的行的数据深度小1的数据深度的列表。由于可能存在多个基于点击行上方的树深度的内容,因此它只能获得最后一个。最后一个将是最接近单击的那个,所以它应该是树中的实际父级。
演示答案 2 :(得分:0)
以您期望的方式查看这是否适合您 - http://jsfiddle.net/swhshuw8/
$('a').click(function () {
var myDataDepth = $(this).closest('tr').attr('data-depth'); // gets the closest depth
var newDataDepth = myDataDepth - 1; // calculates the new depth
var itemsWithDataDepth_newDataDepth = $('[data-depth="' + newDataDepth + '"]'); // gets the items with the new depth
$(itemsWithDataDepth_newDataDepth).each(function(){
console.log( $(this).find('td').html() ); // prints the new items out
});
});
答案 3 :(得分:0)
尝试
$(function () {
$(".link").on("click", function (e) {
elem = $(e.target);
e.preventDefault();
var _elem = $("tr[data-depth="
+ Number(elem.closest("[data-depth]")[0].dataset.depth - 1)
+ "]");
// do stuff with `_elem`
console.log(_elem.text());
});
});