【AJAX】AJAX实现搜索信息自己主动推荐并补全

好久没有继续看AJAX的视频教程了,今天就将最后一个教程案例做完。我们在搜索引擎中输入文字时文本框下会提示对应的信息,这个案例就是实现这样的基本功能,代码比較粗糙还须要进一步完好,当中有些地方也须要向大神们请教一下。完毕效果截图:

一、事先代码准备工作:

1.   JQueryAutoComplete.html负责页面端的显示

a)     截图例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTFpHU180/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

b)    代码例如以下:

<!DOCTYPE html>
<html>
  <head>
    <title>自己主动补全演示样例</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <script type="text/javascript" src="jslib/jQuery.js"></script>
<span style="white-space:pre">	</span><script type="text/javascript" src="jslib/jqueryauto.js"></script>
    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
  </head>
  <body>
  补全演示样例:
  <span style="white-space:pre">	</span><input type="text" id="word"/>
  <span style="white-space:pre">	</span><input type="button" value="提交"/><br/>
  <span style="white-space:pre">	</span><div id="auto"></div>
  </body>
</html>
c)     注:页面端HTML代码基本上在后面的编写中不会改变。

2.   jqueryauto.js负责对页面元素进行更改

3.   wordxml.jsp存储信息推荐的XML数据

a)     初始代码例如以下(后期需改动):

<!-- 这个JSP返回的是XML数据,contentType的值是text/xml -->
<%@ pagelanguage="java" contentType="text/xml; charset=UTF-8"
    pageEncoding="utf-8"%>
<!-- 返回XML数据,将全部数据都返回,等待后台能够完整协作后再限制返回内容 -->
<words>
     <word>absolute</word>
     <word>anyone</word>
     <word>anything</word>
     <word>apple</word>
     <word>abandon</word>
     <word>breach</word>
     <word>break</word>
     <word>boolean</word>
</words>
4.   AutoComplete.java后台Servlet

a)     初始代码例如以下(为了简单起见Servlet不会进行推断操作。所以后面基本上也不会进行更改):

import java.io.IOException;
importjavax.servlet.RequestDispatcher;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
/**
 * @author Ginger
 * 补全内容后台代码
 *接收用户请求
 */
public class AutoCompleteextends HttpServlet {
     @Override
     protected void doGet(HttpServletRequest req, HttpServletResponseresp)
                   throws ServletException, IOException {
            String word=req.getParameter("word");
//          将字符串保存在request对象中
            req.setAttribute("word", word);
//          请求转发到视图层
            RequestDispatchertemp=req.getRequestDispatcher("wordxml.jsp");
            temp.forward(req, resp);
     }

     @Override
     protected void doPost(HttpServletRequest req,HttpServletResponse resp)
                   throws ServletException, IOException {
            doGet(req, resp);
     }
}

二、接下来我们就对jqueryauto.js进行编写

代码的功能能够依据功能和先后顺序分为:

1.   设置推荐文字弹出框auto的样式:

2.   设置button的点击事件:

3.   为输入文本框加入键盘事件

a)     键盘事件分对当按下字母键、上下键、回车键时进行处理:

i.         字母键:向后台提交文本框数据

ii.         上下键:设置推荐文本被高亮的效果

iii.         回车键:模拟button被点击的效果

4.   终于代码

//表示当前高亮的节点
var highlightindex=-1;
$(document).ready(function(){
//    依据输入框设置弹出框的样式
      var wordInput=$("#word");
      var wordInputOffset=wordInput.offset();
      //隐藏自己主动补全div框
      $("#auto").hide().css("border","1pxblack solid").css("position","absolute")
.css("top",wordInput.height()+wordInputOffset.top+"px").css("left",wordInputOffset.left+"px")
      .width(wordInput.width());

//    为文本框加入键盘按下并弹起事件
      $("#word").keyup(function(event){
//    处理文本框中的键盘事件
//    假设输入字母、退格键、删除键,则将信息发送到server
      var myEvent=event || window.event;
      var keyCode=myEvent.keyCode;
      if(keyCode>=65&&keyCode<=90 || keyCode==8 ||keyCode==46){
      //     1.首先获取文本框内容
                    var wordText=$("#word").val();
      //     2.将内容发送给server(文本不为空的情况下才发送数据)
                    var autoNode=$("#auto");
                    if(wordText!=""){
                           $.post("AutoComplete",{word:wordText},function(data){
             //                   2.1转换dom对象为JQuery对象
                                  var jqueryObj=$(data);
             //                   2.2找到全部word节点
                                  varwordNodes=jqueryObj.find("word");
             //                   2.3遍历全部word节点。取出单词内容,加入到auto弹出框中
             //                   每次提交数据前清空补全框数据
                                  autoNode.html("");
                                  $(wordNodes).each(function(i){
             //                          获取单词内容
                                         var wordNode=$(this);
//                                       将节点加入到弹出框中                                     autoNode.append($("<div>").html(wordNode.text()));
                                  });
                                  if(wordNodes.length >0){
                                         autoNode.show();
                                  }else{
                                         autoNode.hide();
                                  }
                           },"xml");
                    }else{
                           autoNode.hide();
//                         隐藏弹出框同一时候重置高亮值
                           highlightindex=-1;
                    }
      }else if(keyCode==38 || keyCode==40){
//    假设输入上下button,则补全内容会被选中
             if(keyCode==38){
//                  向上
//                  找到当前补全框的全部子节点
                    varautoNodes=$("#auto").children("div");
                    if(highlightindex!=-1){
//                         假设原来存在高亮节点。则将背景改为白色
                           autoNodes.eq(highlightindex).css("background-color","white").css("color","black");
                           highlightindex--;
                    }else{
                           highlightindex=autoNodes.length-1;
                    }
                    if(highlightindex==-1){
//                         假设改动索引值后index变成-1,则将索引值指向最后一个元素
                           highlightindex=autoNodes.length-1;
                    }
                    autoNodes.eq(highlightindex).css("background-color","blue").css("color","white");
             }
             if(keyCode==40){
//                  向下
//                  找到当前补全框的全部子节点
                    varautoNodes=$("#auto").children("div");
                    if(highlightindex!=-1){
//                         假设原来存在高亮节点。则将背景改为白色
                           autoNodes.eq(highlightindex).css("background-color","white").css("color","black");
                    }
                    highlightindex++;
                    if(highlightindex==autoNodes.length){
//                         假设改动索引值后index变成-1,则将索引值指向最后一个元素
                           highlightindex=0;
                    }
                    autoNodes.eq(highlightindex).css("background-color","blue").css("color","white");
             }
      }else if(keyCode==13){
      //     假设输入回车
      //     补全框中有选中内容
             if(highlightindex!=-1){
                    varautoNodes=$("#auto").children("div");
      //            将高亮文本赋给输入框
                    $("#word").val(autoNodes.eq(highlightindex).text());
                    highlightindex=-1;
                    $("#auto").hide();
                    alert("已提交。");
             }else{
      //      补全框中没有选中内容
                    alert("已提交。");
                    $("#auto").hide();
             }
      }
      });
//    为button添加点击事件
      $("input[type='button']").click(function(){
             alert("已提交。");
      })
});

三、最后是在后台进行数据的筛选

终于wordxml.jsp代码为

<!-- 这个JSP返回的是XML数据,contentType的值是text/xml -->
<%@ pagelanguage="java" contentType="text/xml; charset=UTF-8"
    pageEncoding="utf-8"%>
<!-- 返回XML数据,将全部数据都返回,等待后台能够完整协作后再限制返回内容 -->
<%
      String word=(String)request.getAttribute("word");
%>
<words>
      <% if("absolute".startsWith(word)){ %>
      <word>absolute</word>
      <%}%>
      <% if("anyone".startsWith(word)){ %>
      <word>anyone</word>
      <%}%>
      <% if("anything".startsWith(word)){ %>
      <word>anything</word>
      <%}%>
      <% if("apple".startsWith(word)){ %>
      <word>apple</word>
      <%}%>
      <% if("abandon".startsWith(word)){ %>
      <word>abandon</word>
      <%}%>
      <% if("breach".startsWith(word)){ %>
      <word>breach</word>
      <%}%>
      <% if("break".startsWith(word)){ %>
      <word>break</word>
      <%}%>
      <% if("boolean".startsWith(word)){ %>
      <word>boolean</word>
      <%}%>
</words>

Author:事始

Sign:仅仅要你还在尝试。

就不算失败。

时间: 2024-10-12 16:39:45

【AJAX】AJAX实现搜索信息自己主动推荐并补全的相关文章

【AJAX】AJAX实现搜索信息自动推荐并补全

好久没有继续看AJAX的视频教程了,今天就将最后一个教程案例做完.我们在搜索引擎中输入文字时文本框下会提示相应的信息,这个案例就是实现这种基本功能,代码比较粗糙还需要进一步完善,其中有些地方也需要向大神们请教一下.完成效果截图: 一.事先代码准备工作: 1.   JQueryAutoComplete.html负责页面端的显示 a)     截图如下: b)    代码如下: <!DOCTYPE html> <html>   <head>     <title>

自动补全搜索实现

目前大多数搜索框都已实现自动补全功能,自己也私底下实现了一个简易版本, 在此总结过程中的一些要点: 1,侦听文本框的value值改变,注意在Ie8及其之前版本的onpropertychange和Ie9的oninput事件与 W3C下的oninput事件的异同: 2,ajax请求数据: 3,自动补全框的定位: 4,上下键导航以及鼠标导航 在此附上源码: .auto-ul{ list-style: none; padding: 0; margin: 0; } .auto-ul li{ margin:

第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息

第三百三十四节,web爬虫讲解2-Scrapy框架爬虫-Scrapy爬取百度新闻,爬取Ajax动态生成的信息 crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻标题和rul地址 有多网站,当你浏览器访问时看到的信息,在html源文件里却找不到,由得信息还是滚动条滚动到对应的位置后才显示信息,那么这种一般都是 js 的 Ajax 动态请求生成的信息 我们以百度新闻为列: 1.分析网站 首先我们浏览器打开百度新闻,在网页中间部分找一条新闻信息 然后查看源码,看看在源码里是否有

web爬虫讲解—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息

crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻rul地址 有多网站,当你浏览器访问时看到的信息,在html源文件里却找不到,由得信息还是滚动条滚动到对应的位置后才显示信息,那么这种一般都是 js 的 Ajax 动态请求生成的信息 我们以百度新闻为列: 1.分析网站 首先我们浏览器打开百度新闻,在网页中间部分找一条新闻信息 然后查看源码,看看在源码里是否有这条新闻,可以看到源文件里没有这条信息,这种情况爬虫是无法爬取到信息的 那么我们就需要抓包分析了,启动抓包软件和抓包

JQuery AJAX $.ajax()方法

AJAX = Asynchronous JavaScript and XML. AJAX 是一种创建快速动态网页的技术. AJAX 通过在后台与服务器交换少量数据的方式,允许网页进行异步更新.这意味着有可能在不重载整个页面的情况下,对网页的一部分进行更新. JQuery脚本库里所提供的AJAX提交的方法有很多,但主要的方法有$.get(),$.post(),$.ajax().其中$.ajax()是前两种方法的底层实现,可以提供比前两者更多的属性与参数设置,如果需要高级的设置使用,建议使用$.aj

一个模拟搜索自己主动补全的实例(超简单)

非常早就像写一个模拟Google搜索栏自己主动补全的实例.那时候刚学点js,css也玩不转.即使网上有些demo,看起来也非常费力.写了两次仅仅是勉强能出来待筛选项.不能自由选择.这两天学了点jQuery的ajax.配合一点资料,自己成功实现了这个功能,jQuery的口号真是名副事实上----The Write Less, Do More. CSS <style type="text/css" > .listbox{ position: relative; left: 10

jquery的输入框自动补全功能+ajax

jquery的输入框自动补全功能+ajax 2017年05月10日 18:51:39 辣姐什么鬼 阅读数:1461 标签: web前端 更多 个人分类: web前端 内容参考网友文章写成,原博的链接找不到了,但是感谢分享! 效果图: 涉及到ajax请求我这里本地请求不到数据就先放测试代码,在文章的最后会放上ajax代码: 用来测试的代码: <!DOCTYPE html> <html> <head lang="en"> <meta charset

maven仓库信息分析站点推荐

maven是java的一个依赖,打包管理的工具,稍微大一点的java项目都需要使用maven. 随着java的壮大,maven仓库越来越大,仓库中的jar包有60多万,各种group,各种构件,各种版本.jar包之间的依赖关系也不容易理清楚,有的jar包有很多个版本,我们很难搞清楚那个版本是更通用,各个版本之间有什么区别. 现在好了内存溢出OutOfMemory.CN开发一个maven内容分析的网站,这里有最近更新的jar包,有group的列表,还有各个版本,以及各个版本在maven中央仓库的引

JavaScript之Ajax-1 Ajax(Ajax原理、Ajax对象属性和方法)

一.Ajax原理 Ajax简介 - Asynchronous JavaScript And Xml 异步的 JavaScript 和 Xml - Ajax 是一种用来改善用户体验的技术,其实质是,使用XMLHttpRequest对象异步地向服务器发送请求 - 服务器返回部分数据,而不是一个完整的页面,以页面无刷新的效果更改页面中的局部内容 Ajax工作原理 获取Ajax对象 二.Ajax对象属性和方法 异步对象的属性和方法 onreadystatechange - onreadystatecha