数据表在与页脚不同的元素中搜索单个列(select 输入)
datatables Individual column searching (select inputs) in a different element than footer
我正在尝试编辑数据表示例中的选项以使用 select 输入,并且他们的示例工作正常。但是,我希望它能在我构建了下拉列表的另一个元素上工作。
我知道了,所以它会填充下拉列表,这很棒,但是如果我单击任何选项,则没有任何反应。我试过将 .on "change"
更改为 "click"
但我只是得到 .replace
不支持此对象。
这是我的代码。
<div class="hidden-sm hidden-xs" id="htmToolbar">
<ul class="nav-xs" id="htmTools">
<li class="dropdown-submenu">
<a style="cursor: pointer;">Manufacturer <i class="fa fa-th-list"></i></a>
<ul id="Manufacturer" class="dropdown-menu" id="StartersTool">
<li class="dropdown-header">Filter By</li>
</ul>
</li>
</ul>
</div>
<div class="hidden-sm hidden-xs" id="htmToolbar">
<ul class="nav-xs" id="htmTools">
<li class="dropdown-submenu">
<a style="cursor: pointer;">Software Tag <i class="fa fa-th-list"></i></a>
<ul id="SoftwareTag" class="dropdown-menu" id="StartersTool">
<li class="dropdown-header">Filter By</li>
</ul>
</li>
</ul>
</div>
<div class="hidden-sm hidden-xs" id="htmToolbar">
<ul class="nav-xs" id="htmTools">
<li class="dropdown-submenu">
<a style="cursor: pointer;">Status <i class="fa fa-th-list"></i></a>
<ul id="Status" class="dropdown-menu" id="StartersTool">
<li class="dropdown-header">Filter By</li>
</ul>
</li>
</ul>
</div>
这是我在函数中的 Js 代码。
$('#Ttable').DataTable
({
initComplete: function ()
{
this.api().columns([1,3,4]).every( function ()
{
var column = this;
var select = $('<li style="width:300px;" class="pickList Manlist"></li>')
.appendTo( $("#Manufacturer"))
.on( 'click', function ()
{
var val = $.fn.dataTable.util.escapeRegex
(
$(this).val()
);
console.log(val);
column
.search( val ? '^'+val+'$' : '', true, false )
.draw();
});
column.data().unique().sort().each( function ( d, j )
{
select.append( '<option value="'+d+'" class="dropdown-item">'+d+'</option>' )
});
});
},
scrollY:"500px",
scrollCollapse: true
}
);
任何帮助都会非常有用
问题是您附加的内容以及您如何注册点击事件。
首先,您将 <option>
附加到 <ul>
... 这显然是无效标记。我建议你使用一些 <li>
.
其次,您在整个 <ul>
而不是用户点击的 <option>
(现在 <li>
)上注册点击事件。这就是获取选项值的 .val()
方法失败的原因。
第三,既然你应该使用<li>
,把.val()
改成.text()
。
这是一个演示:
$('#Ttable').DataTable({
initComplete: function(){
// Have this variable accessible for the whole initComplete
var column;
// Iterate the column
this.api().columns([1]).every( function(){
column = this;
var select = $('<li style="width:300px;" class="pickList Manlist"></li>')
.appendTo( $("#Manufacturer"));
column.data().unique().sort().each( function ( d, j ){
select.append( '<li class="dropdown-item">'+d+'</li>' );
});
});
// Once all appendings are done, register a click handler
$("#Manufacturer li.dropdown-item").on( 'click', function(){
var val = $(this).text();
console.log(val);
column
.search( val ? '^'+val+'$' : '', true, false )
.draw();
});
},
scrollY:"500px",
scrollCollapse: true
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.19/css/jquery.dataTables.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.19/js/jquery.dataTables.min.js"></script>
<div class="hidden-sm hidden-xs" id="htmToolbar">
<ul class="nav-xs" id="htmTools">
<li class="dropdown-submenu">
<a style="cursor: pointer;">Manufacturer <i class="fa fa-th-list"></i></a>
<ul id="Manufacturer" class="dropdown-menu" id="StartersTool">
<li class="dropdown-header">Filter By</li>
</ul>
</li>
</ul>
</div>
<table id="Ttable">
<thead>
<tr>
<th>column 1</th>
<th>column 2</th>
<th>column 3</th>
<th>column 4</th>
</tr>
</thead>
<tbody>
<tr>
<td>something 1</td>
<td>something 2</td>
<td>something 3</td>
<td>something 4</td>
</tr>
<tr>
<td>something 5</td>
<td>something 6</td>
<td>something 7</td>
<td>something 8</td>
</tr>
<tr>
<td>something 9</td>
<td>something 10</td>
<td>something 11</td>
<td>something 12</td>
</tr>
</tbody>
</table>
我正在尝试编辑数据表示例中的选项以使用 select 输入,并且他们的示例工作正常。但是,我希望它能在我构建了下拉列表的另一个元素上工作。
我知道了,所以它会填充下拉列表,这很棒,但是如果我单击任何选项,则没有任何反应。我试过将 .on "change"
更改为 "click"
但我只是得到 .replace
不支持此对象。
这是我的代码。
<div class="hidden-sm hidden-xs" id="htmToolbar">
<ul class="nav-xs" id="htmTools">
<li class="dropdown-submenu">
<a style="cursor: pointer;">Manufacturer <i class="fa fa-th-list"></i></a>
<ul id="Manufacturer" class="dropdown-menu" id="StartersTool">
<li class="dropdown-header">Filter By</li>
</ul>
</li>
</ul>
</div>
<div class="hidden-sm hidden-xs" id="htmToolbar">
<ul class="nav-xs" id="htmTools">
<li class="dropdown-submenu">
<a style="cursor: pointer;">Software Tag <i class="fa fa-th-list"></i></a>
<ul id="SoftwareTag" class="dropdown-menu" id="StartersTool">
<li class="dropdown-header">Filter By</li>
</ul>
</li>
</ul>
</div>
<div class="hidden-sm hidden-xs" id="htmToolbar">
<ul class="nav-xs" id="htmTools">
<li class="dropdown-submenu">
<a style="cursor: pointer;">Status <i class="fa fa-th-list"></i></a>
<ul id="Status" class="dropdown-menu" id="StartersTool">
<li class="dropdown-header">Filter By</li>
</ul>
</li>
</ul>
</div>
这是我在函数中的 Js 代码。
$('#Ttable').DataTable
({
initComplete: function ()
{
this.api().columns([1,3,4]).every( function ()
{
var column = this;
var select = $('<li style="width:300px;" class="pickList Manlist"></li>')
.appendTo( $("#Manufacturer"))
.on( 'click', function ()
{
var val = $.fn.dataTable.util.escapeRegex
(
$(this).val()
);
console.log(val);
column
.search( val ? '^'+val+'$' : '', true, false )
.draw();
});
column.data().unique().sort().each( function ( d, j )
{
select.append( '<option value="'+d+'" class="dropdown-item">'+d+'</option>' )
});
});
},
scrollY:"500px",
scrollCollapse: true
}
);
任何帮助都会非常有用
问题是您附加的内容以及您如何注册点击事件。
首先,您将 <option>
附加到 <ul>
... 这显然是无效标记。我建议你使用一些 <li>
.
其次,您在整个 <ul>
而不是用户点击的 <option>
(现在 <li>
)上注册点击事件。这就是获取选项值的 .val()
方法失败的原因。
第三,既然你应该使用<li>
,把.val()
改成.text()
。
这是一个演示:
$('#Ttable').DataTable({
initComplete: function(){
// Have this variable accessible for the whole initComplete
var column;
// Iterate the column
this.api().columns([1]).every( function(){
column = this;
var select = $('<li style="width:300px;" class="pickList Manlist"></li>')
.appendTo( $("#Manufacturer"));
column.data().unique().sort().each( function ( d, j ){
select.append( '<li class="dropdown-item">'+d+'</li>' );
});
});
// Once all appendings are done, register a click handler
$("#Manufacturer li.dropdown-item").on( 'click', function(){
var val = $(this).text();
console.log(val);
column
.search( val ? '^'+val+'$' : '', true, false )
.draw();
});
},
scrollY:"500px",
scrollCollapse: true
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.19/css/jquery.dataTables.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.19/js/jquery.dataTables.min.js"></script>
<div class="hidden-sm hidden-xs" id="htmToolbar">
<ul class="nav-xs" id="htmTools">
<li class="dropdown-submenu">
<a style="cursor: pointer;">Manufacturer <i class="fa fa-th-list"></i></a>
<ul id="Manufacturer" class="dropdown-menu" id="StartersTool">
<li class="dropdown-header">Filter By</li>
</ul>
</li>
</ul>
</div>
<table id="Ttable">
<thead>
<tr>
<th>column 1</th>
<th>column 2</th>
<th>column 3</th>
<th>column 4</th>
</tr>
</thead>
<tbody>
<tr>
<td>something 1</td>
<td>something 2</td>
<td>something 3</td>
<td>something 4</td>
</tr>
<tr>
<td>something 5</td>
<td>something 6</td>
<td>something 7</td>
<td>something 8</td>
</tr>
<tr>
<td>something 9</td>
<td>something 10</td>
<td>something 11</td>
<td>something 12</td>
</tr>
</tbody>
</table>