Javascript 使用select筛选表数据时出现问题
我有一个html表格,它有很多数据。然后我创建了一个select选项来过滤表并显示过滤后的数据<代码>选择基于Javascript 使用select筛选表数据时出现问题,javascript,jquery,html,Javascript,Jquery,Html,我有一个html表格,它有很多数据。然后我创建了一个select选项来过滤表并显示过滤后的数据选择基于路线列,其中只有3个选项:Marikina、Montalban和Motalban/Marikina 我可以在过滤数据时显示数据,但问题是当我选择Marikina或Montalban时,它也会显示第三个选项,即Montalban/Marikina的路线。 以下是使用select筛选表的jquery代码: $(document).ready(function () { $('.fi
路线
列,其中只有3个选项
:Marikina、Montalban和Motalban/Marikina我可以在过滤数据时显示数据,但问题是当我选择
Marikina
或Montalban
时,它也会显示第三个选项,即Montalban/Marikina
的路线。
以下是使用select筛选表的jquery代码:
$(document).ready(function () {
$('.filter').change(function () {
var values = [];
$('.filter').each(function () {
var colIdx = $(this).data('col');
$(this).find('option:selected').each(function () {
if ($(this).val() != "") values.push( {
text: $(this).text(),
colId : colIdx
});
});
});
filter('table > tbody > tr', values);
});
function filter(selector, values) {console.log(values);
$(selector).each(function () {
var sel = $(this);
var tokens = sel.text().trim().split('\n');
var toknesObj = [], i;
for(i=0;i<tokens.length;i++){
toknesObj[i] = {
text:tokens[i].trim(),
found:false
};
}
var show = false;
//console.log(toknesObj);
$.each(values, function (i, val) {
if (toknesObj[val.colId].text.search(new RegExp("\\b"+val.text+"\\b")) >= 0) {
toknesObj[val.colId].found = true;
}
});
console.log(toknesObj);
var count = 0;
$.each(toknesObj, function (i, val) {
if (val.found){
count+=1;
}
});
show = (count === values.length);
show ? sel.show() : sel.hide();
});
var numOfVisibleRows = $('#myTable tr:visible').length;
var minus = numOfVisibleRows -1;
document.getElementById("nor").innerHTML = minus;
}
const table = document.getElementById('myTable');
const trs = table.querySelectorAll('tbody tr');
const getAllDatesInTable = () => {
const table = document.getElementById('myTable');
const trs = table.querySelectorAll('tbody tr');
const dates = [""];
trs.forEach( tr => {
const date = tr.querySelector('td:first-child').innerText;
if (!dates.includes(date)) {
dates.push(date);
}
});
return dates;
};
const dates = getAllDatesInTable();
const select = document.getElementById('dateFilter');
select.innerHTML = dates.map( d => `<option value=${d}>${d}</option>`);
});
$(文档).ready(函数(){
$('.filter').change(函数(){
var值=[];
$('.filter')。每个(函数(){
var colIdx=$(this).data('col');
$(this).find('option:selected')。每个(函数(){
if($(this.val()!=“”)值。推送({
text:$(this).text(),
科立德:科立德
});
});
});
过滤器('表>正文>tr',值);
});
函数过滤器(选择器,值){console.log(值);
$(选择器)。每个(函数(){
var sel=$(本);
var tokens=sel.text().trim().split('\n');
var toknesObj=[],i;
对于(i=0;i=0){
toknesObj[val.colId].found=true;
}
});
控制台日志(toknesObj);
var计数=0;
$。每个(toknesObj,函数(i,val){
如果(找到值){
计数+=1;
}
});
显示=(计数==值.length);
show?sel.show():sel.hide();
});
var numovisiblerows=$(“#myTable tr:visible”).length;
var减号=numOfVisibleRows-1;
document.getElementById(“nor”).innerHTML=减号;
}
const table=document.getElementById('myTable');
const trs=table.queryselectoral('tbody tr');
常量getAllDatesInTable=()=>{
const table=document.getElementById('myTable');
const trs=table.queryselectoral('tbody tr');
常数日期=[“”];
trs.forEach(tr=>{
const date=tr.querySelector('td:first child')。innerText;
如果(!日期。包括(日期)){
日期。推送(日期);
}
});
返回日期;
};
const dates=getAllDatesInTable();
const select=document.getElementById('dateFilter');
select.innerHTML=dates.map(d=>`${d}`);
});
这是示例html表
我希望如果我只选择
Marikina
,它将只显示Marikina
,而不是Montalban/Marikina
。提前感谢您只需删除正则表达式检查并使用normal=
(等于)进行检查
$(文档).ready(函数(){
$('.filter').change(函数(){
var值=[];
$('.filter')。每个(函数(){
var colIdx=$(this).data('col');
$(this).find('option:selected')。每个(函数(){
if($(this.val()!=“”){
值。推({
text:$(this).text(),
科立德:科立德
});
}
});
});
过滤器('表>正文>tr',值);
});
函数过滤器(选择器、值){
console.log(值);
$(选择器)。每个(函数(){
var sel=$(本);
var tokens=sel.text().trim().split('\n');
var toknesObj=[],
我
对于(i=0;i=0){
toknesObj[val.colId].found=true;
}
});
控制台日志(toknesObj);
var计数=0;
$。每个(toknesObj,函数(i,val){
如果(找到值){
计数+=1;
}
});
显示=(计数==值.length);
show?sel.show():sel.hide();
});
var numovisiblerows=$(“#myTable tr:visible”).length;
var减号=numOfVisibleRows-1;
document.getElementById(“nor”).innerHTML=减号;
}
const table=document.getElementById('myTable');
const trs=table.queryselectoral('tbody tr');
常量getAllDatesInTable=()=>{
const table=document.getElementById('myTable');
const trs=table.queryselectoral('tbody tr');
常数日期=[“”];
trs.forEach(tr=>{
const date=tr.querySelector('td:first child')。innerText;
如果(!日期。包括(日期)){
日期。推送(日期);
}
});
返回日期;
};
const dates=getAllDatesInTable();
const select=document.getElementById('dateFilter');
select.innerHTML=dates.map(d=>`${d}`);
});
表格{
字体系列:arial,无衬线;
边界塌陷:塌陷;
宽度:100%;
}
运输署,
th{
边框:1px实心#dddddd;
文本对齐:左对齐;
填充:8px;
}
tr:n个孩子(偶数){
背景色:#dddddd;
}
路线
目的地
日期
玛丽基纳
古巴
05/08/2019
蒙塔尔班
莱特克斯
05/07/2019
玛丽基纳/蒙塔尔班
奎松市
05/10/2019
正则表达式验证解决了这个问题
if (toknesObj[val.colId].text.trim().search(new RegExp("^"+val.text.trim()+"$")) >= 0) {
toknesObj[val.colId].found = true;
}
感谢您的回复,