使用js实现前端内容实时搜索

  本文主要基于项目的一个基本搜索功能,前端显示所有用户的在线评论信息;用户可以

根据需要在搜索框中输入搜索关键字,实时搜索出相应的显示结果,并高亮显示。

实现代码:

/**

* @brief 搜索一条房间中的符合要求的发言

* @param $keyword 搜索的关键字

*/

var isSkip = false;

$(‘.search-icon‘).click(function() {

showSearch();

});

function showSearch() {

$(‘.search-content‘).addClass(‘bounce‘).slideDown(‘fast‘, function() {

$(‘.present-line-gray-whole‘).addClass(‘present-line-gray-whole-hide‘);

$(‘.search-content input‘).focus();

});

}

$(‘.delete-icon‘).click(function() {

hideSearch();

});

function hideSearch() {

$(‘.present-line-gray-whole‘).removeClass(‘present-line-gray-whole-hide‘);

$(‘.search-content‘).slideUp(100, backToOrigin);

$(‘.talk-board-wrapper‘).animate({ scrollTop: 0}, ‘slow‘);

$(‘.search-content‘).removeClass(‘bounce‘);

isSkip = false;

}

$(‘.search-content input‘).keyup(function(e) {

$(‘.no-match-chat‘).removeClass(‘no-match-chat-change‘);

$(‘.talk-board-wrapper‘).scrollTop(0);

if ($(‘.search-content input‘).val() != ‘‘) {

$(‘.search-content input‘).css(‘border-bottom‘, ‘1px solid rgb(255,209,37)‘);

$(‘#search-img‘).trigger(‘click‘);

} else {

$(‘.search-content input‘).css(‘border-bottom‘, ‘1px solid rgb(65,65,65)‘);

$(‘.talk-board-container .chat-item‘).show();

removeLastHighlightResult();

}

});

$(‘.talk-board-container‘).on(‘click‘, ‘.chat-item‘, chatItemClick);

function chatItemClick() {

var itemIndex;

itemIndex = $(this).index();

if (isSkip) {

backToOrigin();

skipToDest(itemIndex);

}

isSkip = false;

}

function skipToDest(itemIndex) {

var scrollLength;

scrollLength = parseInt($(‘.ps-scrollbar-y-rail‘).css(‘top‘)) + $(‘.talk-board-container .chat-item‘).eq(itemIndex).offset().top - 75;

$(‘.talk-board-wrapper‘).animate({scrollTop: scrollLength}, ‘slow‘);}

function backToOrigin() {

$(‘.search-content input‘).val(‘‘).css(‘border-bottom‘, ‘1px solid rgb(65,65,65)‘);

$(‘.talk-board-container .chat-item‘).show();

$(‘.no-match-chat‘).removeClass(‘no-match-chat-change‘);

removeLastHighlightResult();

}

$(‘#search-img‘).on(‘click‘, function() {

isSkip = true;

$(‘.talk-board-container .chat-item‘).hide();

removeLastHighlightResult();

markSearchResult();

});

function removeLastHighlightResult() {

var $searchElement,

appendText;

$searchElement = $(‘.chat-content p‘).find(‘i‘).length ?

$(‘.chat-content p‘).find(‘i‘) : ‘‘;

if ($searchElement.length) {                     //删除上一次匹配并高亮显示的结果

$.each($searchElement, function(index, content) {

appendText = $(content).text();

$(content).after(appendText).remove();

});

}

}

function markSearchResult() {

var searchResult = false,

keyword = $(‘#search-content-input‘).val(),

matchStr,

$a,

$span,

$chatContent;

$chatContent = $(‘.chat-content p‘);

if (keyword === ‘‘) {

$(‘.no-match-chat‘).addClass(‘no-match-chat-change‘);

return;

}

$.each($chatContent, function(index, content) {                     //遍历整个chat内容,寻找到匹配的字符串高亮显示

if ($(content).text().indexOf(keyword, 0) !== -1) {

$(content).parents(‘.chat-item‘).show();

searchResult = ‘true‘;

if ($(content).find(‘a‘).length) {

matchStr = $(content).find(‘a‘).contents().filter(function() {

return this.nodeType == 3;

}).text().replace(new RegExp(keyword, ‘g‘), ‘<i class="text-background-highlight">‘ + keyword + ‘</i>‘);

$a=$(content).find(‘a‘).clone();

$span = $(content).find(‘a span‘).clone();

$(content).html($(content).contents().filter(function() {

return this.nodeType == 3;

}).text().replace(new RegExp(keyword, ‘g‘), ‘<i class="text-background-highlight">‘ + keyword + ‘</i>‘));

$(content).prepend($a);

$(content).find(‘a‘).html(matchStr);

$(content).find(‘a‘).prepend($span);

} else {

$(content).html(

$(content).text().replace(new RegExp(keyword, ‘g‘), ‘<i class="text-background-highlight">‘ + keyword + ‘</i>‘) );

}

}

});

if (!searchResult) {

$(‘.no-match-chat‘).addClass(‘no-match-chat-change‘);

}

}

/* 搜索工作结束 */

时间: 2024-10-21 10:14:53

使用js实现前端内容实时搜索的相关文章

jquery 表格排序,实时搜索表格内容

jquery 表格排序,实时搜索表格内容 演示 XML/HTML Code <table class="table-sort"> <thead> <tr> <th class="table-sort">First Name</th> <th class="table-sort">Last Name</th> <th class="table-sor

开源分布式搜索平台ELK+Redis+Syslog-ng实现日志实时搜索

logstash + elasticsearch + Kibana+Redis+Syslog-ng ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便.支持通过HTTP使用JSON进行数据索引. logstash是一个应用程序日志.事件的传输.处理.管理和搜索的平台.你可以用它来统一对应用程序日志进行收集管理,提供 Web 接口用于查询和统计.其实logstash是可以被别的替换,比如常见

剖析Elasticsearch集群系列之三:近实时搜索、深层分页问题和搜索相关性权衡之道

转载:http://www.infoq.com/cn/articles/anatomy-of-an-elasticsearch-cluster-part03 近实时搜索 虽然Elasticsearch中的变更不能立即可见,它还是提供了一个近实时的搜索引擎.如前一篇中所述,提交Lucene的变更到磁盘是一个代价昂贵的操作.为了避免在文档对查询依然有效的时候,提交变更到磁盘,Elasticsearch在内存缓冲和磁盘之间提供了一个文件系统缓存.内存缓存(默认情况下)每1秒刷新一次,在文件系统缓存中使

【高德地图API】从零开始学高德JS API(四)搜索服务

摘要:地图服务,大家能想到哪些?POI搜素,输入提示,地址解析,公交导航,驾车导航,步行导航,道路查询(交叉口),行政区划等等.如果说覆盖物Marker是地图的骨骼,那么服务,就是地图的气血.有个各种各样的地图服务,我们的地图应用才能变得有血有肉,活灵活现.第四篇拆成了几个要点,本篇主要讲搜索服务.包括周边搜索,关键词搜索,范围搜索,搜索提示(自动完成,输入提示),行政区域,交叉路口,检索自有数据(云图). demo:http://zhaoziang.com/amap/zero_4_1.html

使用 node.js 开发前端打包程序 ---转载

我们在做前端开发的时候经常会在部署上线的时候做程序的打包和合并,我们接下来就会对如何使用 node.js 开发前端打包程序做非常深入的讲解,希望能够帮到有需要的同学. 我们现在做前端开发更多的是多人共同协作开发,每个人负责不同的模块,便于开发和调试.这样就导致我们最后部署上线的时候需要把所有人开发的模块进行合并,生成单个或多个文件上线.如果手动合并的话肯定是费时又费力,而且非常容易出错,所以我们一般都是通过一些工具来实现自动合并的功能. 打包程序的原理非常简单,入口文件->寻找依赖关系->替换

【高德地图API】从零开始学高德JS API(四)搜索服务——POI搜索|自动完成|输入提示|行政区域|交叉路口|自有数据检索

摘要: 地图服务,大家能想到哪些?POI搜素,输入提示,地址解析,公交导航,驾车导航,步行导航,道路查询(交叉口),行政区划等等.如果说覆盖物Marker是地图的骨骼,那么服务,就是地图的气血.有个各种各样的地图服务,我们的地图应用才能变得有血有肉,活灵活现. 第四篇拆成了几个要点,本篇主要讲搜索服务.包括周边搜索,关键词搜索,范围搜索,搜索提示(自动完成,输入提示),行政区域,交叉路口,检索自有数据(云图). demo:http://zhaoziang.com/amap/zero_4_1.ht

JS高级前端开发群加群说明

JS高级前端开发群加群说明 一.文章背景: 二. 高级群: 三. 加入方式: 四. 说明: 一.文章背景: 去年年初建了几个群,在不经意间火了,一直排在“前端开发”关键字搜索结果第一名.当然取得这样的成绩或这样一个结果也是情理之中,一方面来说,提倡的各种交流沟通方法大部分是正确有效或被大家认可的,另外一方面说,这么多人聚在一起,跟大伙的参与分享是分不开的,尤其是各群的管理,是我们的灵魂精神的支柱.另外在国内行业前进的道路上,尽自己的绵薄之力帮助他人,引领氛围,进而影响行业,也是略感欣慰.有时候精

输入框内容实时监测

输入框内容实时监测!只有输入框内容发生改变才会触发事件,如果输入框内容没有改变则不会触发该事件! <script type="text/javascript" src="jquery-3.2.1.js"></script> <script type="text/javascript">     function OnInput (event) {         alert (event.target.valu

Lucene实现SearchManager近实时搜索

lucene通过NRTManager这个类来实现近实时搜索,所谓近实时搜索即在索引发生改变时,通 过线程跟踪,在相对很短的时间反映给给用户程序的调用 NRTManager通过管理IndexWriter对象,并将IndexWriter的一些方法(增删改)例如 addDocument,deleteDocument等方法暴露给客户调用,它的操作全部在内存里面,所以如果 你不调用IndexWriter的commit方法,通过以上的操作,用户硬盘里面的索引库是不会变化的,所 以你每次更新完索引库请记得co