Javascript 是否从仅具有指定值的HTML表中选择行?
HTML页面上有一个表和一个文本输入框。每当用户在框中键入值时,Javascript都应该过滤表并仅显示数据中包含该值的行 我已经完成了这一部分,但主要的问题是,如果用户在框中键入空格,然后键入另一个值,那么js应该过滤所有单词(用空格分隔的文本)在行的任何单元格中至少出现一次的数据,就像Google建议一样,但使用table 有人有解决办法吗 这是密码Javascript 是否从仅具有指定值的HTML表中选择行?,javascript,html,filter,Javascript,Html,Filter,HTML页面上有一个表和一个文本输入框。每当用户在框中键入值时,Javascript都应该过滤表并仅显示数据中包含该值的行 我已经完成了这一部分,但主要的问题是,如果用户在框中键入空格,然后键入另一个值,那么js应该过滤所有单词(用空格分隔的文本)在行的任何单元格中至少出现一次的数据,就像Google建议一样,但使用table 有人有解决办法吗 这是密码 for(var i=0; i < trs.length; i++ ) { tds = trs[i].getEle
for(var i=0; i < trs.length; i++ )
{
tds = trs[i].getElementsByTagName("td");
//alert(tds );
for( var j=0; j < tds.length; j++ )
{
if( hasWords )
{
for( k = 0; k < searchWords.length; k++ )
{
if( searchWords[k].toLowerCase() != "" && tds[j].innerHTML.toLowerCase().search( searchWords[k].toLowerCase() ) == -1 )
{
found = false;
//foundRows.push(trs[i]);
}
else {
found = true;
foundRows.push(trs[i]);
}
}
}
else
{
if( searchText != "" && tds[j].innerHTML.toLowerCase().search( searchText.toLowerCase() ) != -1 )
{
found = true;
foundRows.push(trs[i]);
}
}
/*
if( tds[j].innerHTML.toLowerCase().search( searchText ) != -1 )
{
found = true;
foundRows.push(trs[i]);
}
*/
}
}
for(变量i=0;i
如果您已经让它为一个单词工作,只需在空格(input.split(“”
)上拆分输入,然后以相同的方式过滤,除了检查每个单词
不过,如果您使用的是JS库,那么肯定会更简单。如果您已经让它为一个单词工作,只需在空格(
input.split(“”)
)上拆分输入,然后以相同的方式进行过滤,只需检查每个单词
不过,如果您使用的是JS库,肯定会更简单。第一种可能性
用一个词做同样的事情。将用户的输入拆分为单独的单词,并对每个单词进行测试
第二种可能性-优化过滤
遍历整个表似乎非常耗时,在开始时可以很容易地用少量开销进行优化。由于javascript对象是一种关联数组,因此可以执行以下操作:
var rx=/([a-z]+)/gi
。您也可以在这里轻松解释任何单字母单词var rx=/([a-z]{2,})/gi
var data = {
"tomorrow": [1, 2, 3],
"will": [3, 5, 6],
"be": [78],
"sunny": [3, 9, 19],
...
};
每个单词的数组对应于表行索引。因此,当用户在文本框中输入任何数据时,您可以轻松地将其拆分为单独的单词并获取所有数组:
var filter = $("#search_filter").val().split(" ");
var firstWordRows = data[filter[0]];
然后,您所要做的就是与这些数组相交并隐藏除结果行之外的所有行
好的是你可以定义你不过滤的停止词(比如in,a,The,of,at等等)
为什么还要麻烦第二个呢?如果页面更有可能被过滤多次,而不是被加载,那么页面加载时的这一开销将使您的过滤迅速。过滤速度将非常快,处理器占用更少
暗示
我强烈建议您使用一些Javascript库,这将使您的生活更加简单。例如,使用jQuery,它没有很长的学习曲线,并且与现有脚本配合使用效果很好。第一种可能性
用一个词做同样的事情。将用户的输入拆分为单独的单词,并对每个单词进行测试
第二种可能性-优化过滤
遍历整个表似乎非常耗时,在开始时可以很容易地用少量开销进行优化。由于javascript对象是一种关联数组,因此可以执行以下操作:
var rx=/([a-z]+)/gi
。您也可以在这里轻松解释任何单字母单词var rx=/([a-z]{2,})/gi
var data = {
"tomorrow": [1, 2, 3],
"will": [3, 5, 6],
"be": [78],
"sunny": [3, 9, 19],
...
};
每个单词的数组对应于表行索引。因此,当用户在文本框中输入任何数据时,您可以轻松地将其拆分为单独的单词并获取所有数组:
var filter = $("#search_filter").val().split(" ");
var firstWordRows = data[filter[0]];
然后,您所要做的就是与这些数组相交并隐藏除结果行之外的所有行
好的是你可以定义你不过滤的停止词(比如in,a,The,of,at等等)
为什么还要麻烦第二个呢?如果页面更有可能被过滤多次,而不是被加载,那么页面加载时的这一开销将使您的过滤迅速。过滤速度将非常快,处理器占用更少
暗示
我强烈建议您使用一些Javascript库,这将使您的生活更加简单。例如,使用jQuery,它没有很长的学习曲线,并且与现有脚本配合使用效果很好。是否使用任何javascript库?如果是这样,请添加它的标签。请粘贴代码,无论您到目前为止做了什么。是否使用任何javascript库?如果是这样,请添加它的标签。请粘贴代码也无论你做了什么。我没有使用任何js库,写所有的c