我有jsfiddle隐藏并显示根据关键字输入(#search-criteria)。大多数工作正常,但有这个错误,我不知道它来自哪里(甚至在查看console.log后)。
问题:
当搜索结果应为" 0"时,它显示为" 1"
例A:关键字="苹果",搜索结果=" 2"
例B:keyword =" applee&#34 ;,搜索结果=" 0"
例C:keyword =" appleee",搜索结果=" 1" *这应该是" 0",并且没有显示行但它计数" 1"!?
注意:我在找不到搜索时附加一个新行但稍后将其删除。
$("#search-criteria").on("keyup", function () {
var keyword = $(this).val().replace(/[A-Za-z0-9]/g, function (td_word) {
return String.fromCharCode(td_word.charCodeAt(0) - 0xFEE0);
}).toLowerCase();
var row = "table#table-body tbody>tr";
if (keyword !== "") {
$(row).each(function () {
var td_word = $(this).text().toLowerCase();
var srowCount = $(row).filter(":visible").length;
//shorthand if function
$(this).closest(row)[td_word.indexOf(keyword) !== -1 ? 'show' : 'hide']();
document.getElementById('count').innerHTML = srowCount;
console.log(srowCount);
if (srowCount === 0) {
$("table#table-body tbody").last().append('<tr class="s_empty"><td colspan="5">Search not found</td></tr>');
$("tr.s_empty").show();
} else {
$("tr.s_empty").remove();
}
});
} else {
$(row).show();
document.getElementById('count').innerHTML = $(row).length;
}
});
提前谢谢。
答案 0 :(得分:2)
工作正常
//search function
$("#search-criteria").on("keyup", function () {
var keyword = $(this).val().replace(/[A-Za-z0-9]/g, function (td_word) {
return String.fromCharCode(td_word.charCodeAt(0) - 0xFEE0);
}).toLowerCase();
var row = "table#table-body tbody>tr";
if (keyword !== "") {
$(row).each(function () {
var td_word = $(this).text().toLowerCase();
//shorthand if function
$(this).closest(row)[td_word.indexOf(keyword) !== -1 ? 'show' : 'hide']();
});
var srowCount = $(row).filter(":visible").length;
document.getElementById('count').innerHTML = srowCount;
if (srowCount === 0) {
if(!$(row).last().hasClass('s_empty'))
{
$("table#table-body tbody").last().append('<tr class="s_empty"><td colspan="5">Search not found</td></tr>');
}
$("tr.s_empty").show();
} else {
$("tr.s_empty").remove();
}
} else {
$("tr.s_empty").remove();
$(row).show();
document.getElementById('count').innerHTML = $(row).length;
}
});
答案 1 :(得分:1)
问题是你首先使用rowCount,然后你正在进行show hide,试试这个
$("#search-criteria").on("keyup", function () {
var keyword = $(this).val().replace(/[A-Za-z0-9]/g, function (td_word) {
return String.fromCharCode(td_word.charCodeAt(0) - 0xFEE0);
}).toLowerCase();
var row = "table#table-body tbody>tr";
if (keyword !== "") {
$(row).each(function () {
var td_word = $(this).text().toLowerCase();
var srowCount;
//shorthand if function
$(this).closest(row)[td_word.indexOf(keyword) !== -1 ? 'show' : 'hide']();
srowCount = $(row).filter(":visible").length;
document.getElementById('count').innerHTML = srowCount;
console.log(srowCount);
if (srowCount === 0) {
$("table#table-body tbody").last().append('<tr class="s_empty"><td colspan="5">Search not found</td></tr>');
$("tr.s_empty").show();
} else {
$("tr.s_empty").remove();
}
});
} else {
$(row).show();
document.getElementById('count').innerHTML = $(row).length;
}
});