zoukankan      html  css  js  c++  java
  • 使用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');
                    }
                }
    
                /* 搜索工作结束 */
  • 相关阅读:
    从点滴看管理之新生代员工培养方式的思考
    手机应用PC端演示工具介绍
    Python Day 66 Django框架、Auth认证模块、Auth模块常用方法、扩展默认的auth_user表、补充orm 模型类中releatename属性和 自关联
    Python Day 65 Django框架、Django生命周期、Django中间件、中间件执行流程、Django中MTV模式 和 MVC模式
    Python Day 64 Django框架、cookie和session、Django中Session相关方法、Django中支持Session5种存储介质
    Python Day 63 Django框架、Django模板系统(渲染页面的作用)
    Python Day 62 Django框架、Django框架中分页 、 网页攻击
    Python Day 61 Django框架、Django框架ORM一对一表操作、Django列类型(重点)、自定义列类型、Django-amdin自带管理后台
    Python Day 60 Django框架、ORM高级查询、级联删除、增加多条数据、Django中Xss攻击、事务
    Python Day 59 Django框架、Django中ORM多对多表操作(联合唯一索引)
  • 原文地址:https://www.cnblogs.com/lds2014/p/3935879.html
Copyright © 2011-2022 走看看