2015年12月22日 15:45:08 星期二

情景: 用来筛选列表中的数据, 由于单条数据很简短, 没有用php+mysql去实现筛选功能, 只用javascript进行筛选, 匹配的高亮, 或者将不匹配的隐藏掉

效果图:

html:

 <div class="contracts-header">名称: <input type="text" value="" id="search_contract_name"></div>
<div class="contracts-header">代码: <input type="text" value="" id="search_contract_code" placeholder="不区分大小写"></div>
<div class="contracts-header"><button onclick="search()">查找</button></div> <div id="contracts-list">
<ul>
<li><input type="checkbox" name="contract[]" value="code|name" /><span>name(code)</span></li>
<li><input type="checkbox" name="contract[]" value="code|name" /><span>name(code)</span></li>
</ul>
</div>

javascript:

 function search()
{
var search_contract_name = $("#search_contract_name").val();
var search_contract_code = $("#search_contract_code").val(); if (search_contract_name && search_contract_code) { //两个输入框都有值
search_contract_code = search_contract_code.toLowerCase(); //不区分大小写, 全部转换为小写, 下同
$("input[name='contract[]']").each(
function () {
var code_name = this.value;
var search_code = code_name.toLowerCase().indexOf(search_contract_code);
var search_name = code_name.toLowerCase().indexOf(search_contract_name);
if (search_code >=0 && search_name >=0 ) {
// this.nextSibling.style.backgroundColor = "#FFDEAD"; //高亮匹配到的
this.parentNode.style.display = 'block';
} else {
// this.nextSibling.style.backgroundColor = "";
this.parentNode.style.display = 'none'; //隐藏不匹配的
}
}
);
} else if(search_contract_name || search_contract_code) { //只有一个输入框有值
search_contract_name = search_contract_name.length ? search_contract_name : 'xxx'; //默认为xxx是因为不可能存在xxx
search_contract_code = search_contract_code.length ? search_contract_code.toLowerCase() : 'xxx';
$("input[name='contract[]']").each(
function () {
var code_name = this.value;
var search_code = code_name.toLowerCase().indexOf(search_contract_code);
var search_name = code_name.toLowerCase().indexOf(search_contract_name);
if (search_code >=0 || search_name >=0 ) {
// this.nextSibling.style.backgroundColor = "#FFDEAD";
this.parentNode.style.display = 'block';
} else {
// this.nextSibling.style.backgroundColor = "";
this.parentNode.style.display = 'none';
}
}
);
}
}

2020-5-13 10:30:18 星期三

另一个版本:

支持模糊筛选, 支持select筛选; 限制: 搜索前, 保证页面里的数据都加载完毕

1. 首先要求数据列表是用table标签显示的

2. 每个td都有一个属性 data-col 他的值跟对应表单input/select 的name属性一致

js-1: 点击搜索时, 获取筛选条件;

 function getInputsForFilter (id, tagName) {
let data = {};
let arrTagName = tagName.split(',');
for (let j=0; j<arrTagName.length; j++) {
let tname = arrTagName[j];
let inputs = document.getElementById(id).getElementsByTagName(tname);
console.log(inputs); for (let i=0; i<inputs.length; i++) {
let k = inputs[i].name;
let v = inputs[i].value; if (tname === 'select') {
console.log(inputs[i]['selectedOptions'][0].innerText);
v = inputs[i]['selectedOptions'][0].innerText;
} data[k] = v;
}
}
console.log(data);
return data;
}

js-2: 遍历tr标签, 进行过滤

 function listFilter(inputsId, listId) {
let inputs = getInputsForFilter(inputsId, 'input,select'); //取出非空的条件
let params = [];
for (let i in inputs) {
if (inputs[i].length !== undefined && inputs[i].length > 0) {
params.push({name:i,value:inputs[i]});
}
}
console.log(params); //获取所有行
let trList = document.getElementById(listId).getElementsByTagName('tr'); if (params.length === undefined || params.length === 0) { //没有筛选条件, 所有的行都显示
for (let i=1; i<trList.length; i++) {
let tr = trList[i];
tr.style.display = '';
}
} else {
for (let i=0; i<trList.length; i++) {
let tr = trList[i];
let tds = tr.getElementsByTagName('td'); let txt = {}; //存储每个td的文字内容
for (let j=0; j<tds.length; j++) {
let colName = tds[j].getAttribute('data-col');
txt[colName] = tds[j].innerText;
} let pos = 0;
for (let j=0; j<params.length; j++) {
let name = params[j]['name'];
if (txt[name] !== undefined) {
pos = txt[name].indexOf(params[j]['value']); //跟筛选条件做对比
if (pos === -1) {
break; //有一个匹配不上就退出, 此行不显示
}
}
} if ( pos === -1) {
tr.style.display = 'none';
} else {
tr.style.display = '';
}
}
} }

javascript 搜索并高亮显示的更多相关文章

  1. 搜索结果高亮显示(不改变html标签)

      分类: 代码2010-02-28 13:44 1574人阅读 评论(3) 收藏 举报 htmlinputstring 一.问题的产生 搜索结果高亮显示,在新闻标题,来源之类的地方好做,只需要用st ...

  2. asp实现关键词不区分大小写搜索并高亮显示

    用ASP做搜索很容易,但要实现智能搜索这类就比较累一点,其实任何程序都差不多,主要还是看数据库的处理能力,一般小网站ASP经常跟ACCESS数据库搭配,在这种配置下我们要实现关键词不区分大小写搜索并高 ...

  3. JavaScript搜索关键字高亮的实现

    高亮功能主要是指对页面中指定区域的指定文字进行高亮显示,也就是背景着色.一般在搜索结果页面会经常用到这个功能. 下面就为大家提供一种解决方案,用javascript实现. 首先在<head> ...

  4. spring data solr 搜索关键字高亮显示

    spring data solr 搜索关键字高亮显示 public Map<String, Object> highSearch(Map searchMap) { Map map = ne ...

  5. Angularjs^1.2.9 搜索关键字高亮显示

    需求分析: 根据关键字搜索网页内容,并且高亮显示内容中的关键字细节分析: 1.每次执行搜索操作,需清空上一次结果 2.需区分html标签和正常文本内容,否则为关键字添加样式以后会出现标签内容被显示的情 ...

  6. 使用spring data solr 实现搜索关键字高亮显示

    后端实现: @Service public class ItemSearchServiceImpl implements ItemSearchService { @Autowired private ...

  7. ElasticSearch 5.X 搜索并用高亮显示

    public List<WOSearchModel> searchOrder(OrderSearchReqVO request) throws Exception{List<WOSe ...

  8. vim学习之旅01-文本搜索并高亮显示

    step 1:在linux终端新建一个test.txt文本文档:vim test.txt; 回车后打开编辑器: step 2:进入编辑状态(键盘"i")输入一段文本,退出编辑(键盘 ...

  9. javascript 移动鼠标高亮显示改行

    主要用到两个事件 onmouseover onmouseout <!DOCTYPE html> <html> <head> <meta charset=&qu ...

随机推荐

  1. verilog阻塞与非阻塞的初步理解(三)

    下面这段源码是因为习惯不好,出现不正确波形的例子. module pwm_division(reset,clkin,clkout); input reset,clkin; output clkout; ...

  2. SqlServer 18456 错误解决方案

    sqlserver 安装需注意事项:  不要选择,否则运行一段时间后sqlserver登录时会出现18456错误. 发生18456错误(sa 可登录的情况下)解决本地用户登录问题的方案: <1& ...

  3. 【转】【整理】将Linux脚本中的正常输出,警告,错误等信息输出到文件中

     本文来自:http://blog.csdn.net/woshinia/article/details/18040063   很早以前  编译的时候 就在用 2>&1,但是一直没有生成一 ...

  4. vim的寄存器和剪贴簿操作?

    vim 复制/ 删除 多行? 有确定序号的行: :10,15m20, 10,15co20 没有确定序号的行: ndd, nyy. 其中的n表示, 从当前行开始算起(当前行本身要包含!!!), 向下共删 ...

  5. Linux下更新时间

    方法一.使用命令 ntpdate time-a.nist.gov 方法二.本地安装ntpdate客户端 在本地安装ntpdate客户端,更新时用 ntpdate cn.pool.ntp.org 如果你 ...

  6. Android布局属性大全

    RelativeLayout http://wenku.baidu.com/view/2e39724333687e21af45a97e.html?from=related&hasrec=1 h ...

  7. 2015年11月26日 Java基础系列(三)ThreadLocal类初级学习

    序,ThreadLocal类是为了解决多线程的安全问题.线程安全的意思也就是说每个线程操作自己的变量,不要对其他线程的值造成影响. 在很多情况下,ThreadLocal比直接使用synchronize ...

  8. 微信事业群WXG成立 致力于打造微信大平台

    今天,微信之父张小龙带领微信团队成立微信事业群(WeiXin Group,简称WXG),致力于打造微信大平台,由他们负责微信基础平台.微信开放平台.微信支付拓展.O2O等微信延伸业务的发展,并包括邮箱 ...

  9. Python-Matplotlib安装及简单使用

    在使用NumPy进行学习统计计算时是枯燥的,大量的数据令我们很头疼,所以我们需要把它图形化显示. Matplotlib是一个Python的图形框架,类似于MATLAB和R语言. Matplotlib的 ...

  10. CentOS 6.5 3.0.4安装agentd

    更改主机名为test3 [root@localhost ~]# cat /etc/sysconfig/network NETWORKING=yes HOSTNAME=test3 关闭selinux [ ...