我目前有一个过滤div:
<div class="filterOptions" id="FilterStatus">
<input type="checkbox" id="Status1" data-status="1"><label for="Status1">1</label>
<input type="checkbox" id="Status2" data-status="2"><label for="Status2">2</label>
<input type="checkbox" id="Status3" data-status="3"><label for="Status3">3</label>
<input type="checkbox" id="Status4" data-status="4"><label for="Status4">4</label>
</div>
它自己的JavaScript完美地完成了这项工作。但是,当标题悬停时,我想将其放置在"状态"列标题的正下方。将代码放在表中本身似乎会删除代码,那么我应该在其他地方添加它吗?
这个jsfiddle显示了正在发生的事情。在此它显示了div,尽管它将其移出表div。 理想情况下,我希望它仅在将鼠标悬停在特定表标题上时显示,但我被难住了。
像这样:
var table = $('#myTable').DataTable({
autoWidth: false,
initComplete: function(settings, json) {
let api = new $.fn.dataTable.Api(settings);
let header = api.column(0).header();
let originalText = $(header).text();
let newText = originalText + `<div class="filterOptions" id="FilterStatus">
<input type="checkbox" id="Status1" data-status="1">
<label for="Status1">1</label>
<input type="checkbox" id="Status2" data-status="2">
<label for="Status2">2</label>
<input type="checkbox" id="Status3" data-status="3">
<label for="Status3">3</label>
<input type="checkbox" id="Status4" data-status="4">
<label for="Status4">4</label>
</div>`;
$(header).html(newText).attr("id", "hover")
}
});
使用此 CSS:
#FilterStatus {
display: none;
}
#hover:hover #FilterStatus {
display: block;
}
不过,您需要更改复选框的操作!
一种方法是在<thead>
下放置第二个<tr>
,并使用jQuery添加一个hover
事件,如下所示:
$('.status-header').hover(function(){
$('.filterOptions').css('display','inline');
}, function(){
$('.filterOptions').css('display','none');
})
var table = $('#myTable').DataTable({autoWidth: false});
.filterOptions {
display:none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.datatables.net/1.10.13/js/jquery.dataTables.js"></script>
<link href="https://cdn.datatables.net/1.10.13/css/jquery.dataTables.css" rel="stylesheet" />
<table id="myTable" class="display">
<thead>
<tr>
<th class="status-header">Status
</th>
<th>Col 1</th>
<th>Col 2</th>
</tr>
<tr class="status-header">
<td colspan="3" class="">
<div class="filterOptions" id="FilterStatus">
<input type="checkbox" id="Status1" data-status="1"><label for="Status1">1</label>
<input type="checkbox" id="Status2" data-status="2"><label for="Status2">2</label>
<input type="checkbox" id="Status3" data-status="3"><label for="Status3">3</label>
<input type="checkbox" id="Status4" data-status="4"><label for="Status4">4</label>
</div>
</td>
</tr>
</thead>
<tbody>
<tr>
<td>Status 1</td>
<td>Row 1 Data</td>
<td>Row 1 Data</td>
</tr>
<tr>
<td>Status 2</td>
<td>Row 2 Data</td>
<td>Row 2 Data</td>
</tr>
</tbody>
</table>
查看这个:使用CSS
注意:在使用此代码段之前,您需要小心,因为数据表在单击"th"标签时会自行排序,使用一些 CSS 我已经设法克服了这个问题,但它不是 100% 修复的。
var table = $('#myTable').DataTable({autoWidth: false});
ul {
list-style: none;
padding: 0;
margin: 0;
}
ul li {
position: relative;
}
ul li ul {
display: none;
position: absolute;
top: 100%;
background-color: rgba(0,0,0,.8);
color: #fff;
width: 100%;
padding: 10px;
}
ul li:hover ul {
display: block;
}
ul li li {
display: block;
clear: both;
}
ul li ul input[type="checkbox"] {
cursor: not-allowed;
display: block;
float: left;
margin: 5px 10px 0 0;
}
ul li ul label {
width: 100%;
float: left;
display: block;
cursor: pointer;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.datatables.net/1.10.13/js/jquery.dataTables.js"></script>
<link href="https://cdn.datatables.net/1.10.13/css/jquery.dataTables.css" rel="stylesheet"/>
<table id="myTable" class="display">
<thead>
<tr>
<th>
<ul>
<li>
<a href="#">Status</a>
<ul>
<li><label for="Status1"><input type="checkbox" id="Status1" data-status="1">1</label></li>
<li><label for="Status2"><input type="checkbox" id="Status2" data-status="2">2</label></li>
<li><label for="Status3"><input type="checkbox" id="Status3" data-status="3">3</label></li>
<li><label for="Status4"><input type="checkbox" id="Status4" data-status="4">4</label></li>
</ul>
</li>
</ul>
</th>
<th>Col 1</th>
<th>Col 2</th>
</tr>
</thead>
<tbody>
<tr>
<td>Status 1</td>
<td>Row 1 Data</td>
<td>Row 1 Data</td>
</tr>
<tr>
<td>Status 2</td>
<td>Row 2 Data</td>
<td>Row 2 Data</td>
</tr>
</tbody>
</table>