我有一张包含一些记录和文本框的表格。我想基于在keyup事件上的文本框中输入的字符串来过滤表数据。
目前我正在使用一个代码块来过滤表数据,但它搜索表中存在于字符串中任何位置的记录。
例如: - 如果我输入' ab'在文本框中,它使用字符串过滤表记录,其中包含关键字' ab'像abcd,babd,cdab等。
但我的要求是当我输入关键字' ab'在文本框中,它只搜索那些从' ab'开始的字符串。像abcd,abdc等。
这是我目前的代码: -
function Search_Gridview(strKey, strGV) {
var strData = strKey.value.toLowerCase().split(" ");
var tblData = document.getElementById(strGV);
var rowData;
for (var i = 1; i < tblData.rows.length; i++) {
rowData = tblData.rows[i].cells[3].innerHTML;
var styleDisplay = 'none';
for (var j = 0; j < strData.length; j++) {
if (rowData.toLowerCase().indexOf(strData[j]) >= 0)
styleDisplay = '';
else {
styleDisplay = 'none';
break;
}
}
tblData.rows[i].style.display = styleDisplay;
}
}
请帮帮我们......
答案 0 :(得分:1)
您可以使用jQuery过滤包含以例如开头的字符串的列这种方式的“ab”:
var re = $("#TABLE_ID td").filter(function(i){ return this.innerHTML.startsWith("ab") })
//You can after, get the values of each td of the result of this way
re.map(function(i){return this.innerHTML})
答案 1 :(得分:0)
您可以使用RegExp的测试方法。
var stringData = [
'aaa', 'aab', 'aac',
'aba', 'abb', 'abc'
];
var searchPrefix = 'ab';
var result = stringData.filter(function (str) {
// return true if str has prefix with searchPrefix.
return (new RegExp('^' + searchPrefix)).test(str);
});
console.log(result);
答案 2 :(得分:0)
要仅搜索以您输入的搜索字符开头的字符串,只需在原始代码的一行上更改一个字符即可。
更改此行
if (rowData.toLowerCase().indexOf(strData[j]) >= 0)
进入这个...
if (rowData.toLowerCase().indexOf(strData[j]) == 0)
这是强制 indexOf()寻址为零,而不是允许中间字符串匹配。
下面是用于复制和粘贴到项目(例如html表过滤器)中的完整(修改后的)代码。
function Search_Gridview(strKey, strGV) {
var strData = strKey.value.toLowerCase().split(" ");
var tblData = document.getElementById(strGV);
var rowData;
for (var i = 1; i < tblData.rows.length; i++) {
rowData = tblData.rows[i].cells[3].innerHTML;
var styleDisplay = 'none';
for (var j = 0; j < strData.length; j++) {
if (rowData.toLowerCase().indexOf(strData[j]) == 0)
styleDisplay = '';
else {
styleDisplay = 'none';
break;
}
}
tblData.rows[i].style.display = styleDisplay;
}
}