【发布时间】:2021-12-06 00:22:08
【问题描述】:
我有一个我用 JavaScript 构建的表格,它基本上是一个很大的出版物列表,带有一个“年份”标题,然后是该年份的每个出版物的一行:
<table class="mytable" id="myTable">
<tr class="header">
<th style="width:60%;">2020</th>
</tr>
<tr name="latin_america_zero-deforestation">
<td>"Cattle Ranchers and Deforestation.”
</td>
</tr>
<tr name="latin_america_policy-outcomes">
<td>“Impacts on Land Use Conversion.”
</td>
</tr>
<tr name="latin_america_supply-chain_policy-outcomes">
<td>“Costs of the Amazon Soy Moratorium.”
</td>
</tr>
<tr class="header">
<th style="width:60%;">2019</th>
</tr>
<tr name="africa_policy-outcomes">
<td>“Environmental Change”
</td>
</tr>
<tr name="latin_america_policy-outcomes">
<td>“Land Use Change”
</td>
</tr>
<tr class="header">
<th style="width:60%;">2018</th>
</tr>
<tr name="north_america_zero-deforestation">
<td>“Deforestation Remedies”
</td>
</tr>
<tr name="latin_america_zero-deforestation">
<td>“Land Use Change in Latin American Cerrados”
</td>
</tr>
</table>
基于tr 名称,我可以通过一些按钮按关键字(地区或主题)进行过滤:
<button class="btn" onclick="filterSelection('policy-outcomes')">Policy Outcomes</button>
<button class="btn" onclick="filterSelection('latin_america')"> Latin America</button>
按钮调用此函数,该函数根据tr 名称标签中的关键字进行过滤:
//Sort by class..
function filterSelectionByTopic(thing) {
var rows = $('#myTable').find('tr:not(:has(th))').get();
console.log(rows)
$("#myTable tr").show()
$('#myTable').find('tr:not(:has(th))').not('thead td').not("[name*=" + thing + "]").fadeOut(300)
var tabhead = "header"
//$("#myTable tbody tr:not(."+thing + ')').hide();
//$("#myTable tr.header").fadeIn(1)
}
虽然这工作正常,但我希望过滤器隐藏没有返回行的表头(年份)。
例如,如果我使用 filterSelection('policy-outcomes') 进行过滤:2020 年和 2019 年有符合此条件的出版物,而 2018 年则没有。目前 2018 将显示为表头,下面没有行,但我想隐藏任何没有符合条件的行的表头。
所以,本质上,filterSelection('policy-outcomes') 应该是这样的:
2020
Impacts on Land Use Conversion.
Costs of the Amazon Soy Moratorium.
2019
Environmental Change.
Land Use Change.
我怎样才能做到这一点?
【问题讨论】:
-
您的 HTML 错误:
TR元素不接受name属性,您应该改用数据集属性 -
这能回答你的问题吗? How to sort an HTML table?
标签: javascript html