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. Spring4学习笔记-AOP

    1.加入jar包 com.springsource.org.aopalliance-1.0.0.jar com.springsource.org.aspectj.weaver-1.6.8.RELEAS ...

  2. jqxTreeGrid

    基本TreeGrid样本 <!DOCTYPE html> <html lang="en"> <head> <title id=" ...

  3. Idea修改js和jsp不用重启

  4. motto1

    不要失去了才懂得珍惜.很多东西是不能再来的,又有很多东西再来是要付出代价的,所以,好好珍惜你现在拥有的一切,努力去争取你现在没有的.

  5. php5调用web service

    工作中需要用php调用web service接口,对php不熟,上网搜搜,发现关于用php调用web service的文章也不多,不少还是php4里用nusoap这个模块调用的方法,其实php5里已经 ...

  6. 用一个简单的例子来理解python高阶函数

    ============================ 用一个简单的例子来理解python高阶函数 ============================ 最近在用mailx发送邮件, 写法大致如 ...

  7. 深度剖析:如何实现一个 Virtual DOM 算法

    本文转载自:https://github.com/livoras/blog/issues/13 目录: 1 前言 2 对前端应用状态管理思考 3 Virtual DOM 算法 4 算法实现 4.1 步 ...

  8. Sturts2的action不执行任何方法的原因

    今天用<s:url action="xxx">调用action的时候出现了一个“异常”, action里的任何方法都没有执行,直接返回success,而且没有任何报错. ...

  9. php补充

    PHP 教程 echo 和 print 之间的差异:echo - 能够输出一个以上的字符串print - 只能输出一个字符串,并始终返回 1提示:echo 比 print 稍快,因为它不返回任何值. ...

  10. EL表达式和JSTL

    EL相关概念JSTL一般要配合EL表达式一起使用,来实现在jsp中不出现java代码段.所以我们先来学习EL表达式 EL主要用于查找作用域中的数据,然后对它们执行简单操作:它不是编程语言,甚至不是脚本 ...