jQuery基于xml格式数据实现模糊查询及分页功能的方法


Posted in Javascript onDecember 25, 2016

本文实例讲述了jQuery基于xml格式数据实现模糊查询及分页功能的方法。分享给大家供大家参考,具体如下:

1、此代码只支持xml 格式数据,根据不同需求修改ajax的success方法就ok了

2、此代码只是针对ajax只需一次请求的情况下

String.prototype.trim=function(){return this.replace(/(^\s*)|(\s*$)/g,"");};//解决ie trim问题
(function($) {
/**
 * ===============================================================================================================
 * ==========  模糊搜索功能  =================================================================================
 * ===============================================================================================================
 *
 * */
  $.xml=function(data){//加载xml
    var xmlobj=null;
    if(window.ActiveXObject){
       var xml;
      xml = new ActiveXObject("Microsoft.XMLDOM");
      xml.async = false;
      xml.loadXML(data);
      xmlobj=$(xml);
   }else{
     xmlobj=$(data);
   }
    return xmlobj;
  };
  //获取节点
  $.getnode=function(key,obj){
    var nodevalue=obj.children(key).text();
    return nodevalue;
  };
  $.xmldata=null;
  $.jsondata=null;
  $.indexdata=null;
  $.inputid=null;
  $.pagetoolid=null;
  $.resultdata=null;
  $.pagetotal=1;
  $.load=function(url){
    $.ajax({
       type: "post",
       url: url,
       dataType: "text",
       success:function(data){
         $.xmldata=$.xml(data);
         var jsonstr='{';
         var indexstr="{";
         $.xmldata.find("QUERYINFO").find("ROW").each(function(i){
           var point=i==0?"":",";
           var ZZJGDM=$.getnode("ZZJGDM",$(this));
           var JGMC=$.getnode("JGMC",$(this));
           var DWLX=$.getnode("DWLX",$(this));
           var JGJC=$.getnode("JGJC",$(this));
           var JGBH=$.getnode("JGBH",$(this));
           var ZCDZ=$.getnode("ZCDZ",$(this));
           jsonstr+=point+"'"+JGBH+"':{'ZZJGDM':'"+ZZJGDM+"','JGMC':'"+JGMC+"','JGBH':'"+JGBH+"','JGJC':'"+JGJC+"','ZCDZ':'"+ZCDZ+"','DWLX':'"+DWLX+"'}";
           indexstr+=point+"'"+JGMC+"':'"+JGBH+"'";
          });
         jsonstr+="}";
         indexstr+="}";
         $.indexdata=eval("("+indexstr+")");
         $.jsondata=eval("("+jsonstr+")");
         }});
  };
  $.select=function(obj){//选中结果中的一项时
    var id=obj.attr("id");
    $("#"+$.inputid).val($.jsondata[id].JGMC);
    $("#reg_companysimplename").val($.jsondata[id].JGJC);
    $("#reg_companysimplename_form").val($.jsondata[id].JGJC);
    $("#reg_companycode").val($.jsondata[id].ZZJGDM==""?"---":$.jsondata[id].ZZJGDM);
    $("#reg_companycode_form").val($.jsondata[id].ZZJGDM==""?"---":$.jsondata[id].ZZJGDM);
    $("#reg_companytype").val($.jsondata[id].DWLX);
    $("#reg_companytype_form").val($.jsondata[id].DWLX);
    $("#reg_jgbh").val($.jsondata[id].JGBH);
    $("#reg_regaddress").val($.jsondata[id].ZCDZ);
    $("#reg_regaddress_form").val($.jsondata[id].ZCDZ);
    $("#"+$.inputid).focus();
    $("#"+$.inputid).blur();
  };
  $.fn.search=function(obj){//程序入口
    var oldkeyword="";
    var id=obj.id;
    var url=obj.url;
    $.inputid=$(this).attr("id");
    if($.xmldata==null){
      $.load(url);
    }
    //========================================键盘事件==========================================
    $(this).keyup(function(){
      var resultlist=null;
      var keywordvalue=$(this).val().trim();
      $("#reg_companysimplename").val("");
      $("#reg_companycode").val("");
      $("#reg_companytype").val("");
      if(keywordvalue==""||oldkeyword==keywordvalue){//解决ie 的keyup 事件异常
        if(keywordvalue==""){
          $("#"+id+" ul").parent().hide();
        }
        return;
      }else{
        oldkeyword=keywordvalue;
      }
      var jsonstr='{';
      var rownum=0,pagesize=10,num=0;
      $.pagetotal=1;
      $.indexsearch($.indexdata,keywordvalue);
      resultlist=$.indexsearch($.indexdata,keywordvalue);
      var ids="[";
      for(var i in resultlist){//给查询结果分页
        var point=$.pagetotal==1?"":",";
        rownum++;
        if(rownum>=pagesize&&rownum%pagesize==0||resultlist.length==rownum){
          ids+=","+"'"+resultlist[i]+"']";
          jsonstr+=point+"'"+$.pagetotal+"':"+ids;
          ids="[";
          num=0;
          if(rownum%pagesize==0){
            $.pagetotal++;
          }
        }else{
          point=num==0?"":",";
          ids+=point+"'"+resultlist[i]+"'";
          num++;
        }
      }
      jsonstr+="}";
      $.resultdata=eval("("+jsonstr+")");
      //初始化结果列表
      if(rownum==0)return;
      var pagenum=1;
      $.pageto(pagenum,$.resultdata,$("#"+id+" ul"));
      if($.pagetotal>1){
        $.pagetool.createpagetool($.pagetotal);
        $.pagetool.pageto(pagenum,$.pagetotal);
        $("#pagetool span[pagenum='1']").css("backgroundColor",'lightblue');
      }else{
        $("#pagetool").html("");
      }
      $("#pagetool .num").click(function(){
        pagenum=eval($(this).text());
        $("#pagetool span").css("backgroundColor",'white');
        $(this).css("backgroundColor",'lightblue');
        $.pageto(pagenum,$.resultdata,$("#"+id+" ul"));
      });
      $("#pagetool .up").click(function(){
        pagenum--;
        if(pagenum!=0){
        $("#pagetool span").css("backgroundColor",'white');
        $("#pagetool span[pagenum='"+pagenum+"']").css("backgroundColor",'lightblue');
        $.pageto(pagenum,$.resultdata,$("#"+id+" ul"));
        $.pagetool.pageto(pagenum);
        }else{
          pagenum++;
        }
      });
      $("#pagetool .down").click(function(){
        pagenum++;
        if(pagenum<=$.pagetotal){
        $("#pagetool span").css("backgroundColor",'white');
        $("#pagetool span[pagenum='"+pagenum+"']").css("backgroundColor",'lightblue');
        $.pageto(pagenum,$.resultdata,$("#"+id+" ul"));
        $.pagetool.pageto(pagenum);
        }else{
          pagenum--;
        }
      });
    });
  };
  //工具栏分页
  $.pagetool = {
    createpagetool : function(pagetotal) {
      var html = "<span class='up'>up</span>";
      var pagetoolpagenum=1;
      for (var i = 1; i <= pagetotal; i++) {
        if(i%5==1&&i>5){
          pagetoolpagenum++;
        }
        html += "<span pagenum='"+i+"' i='" +pagetoolpagenum + "' class='num'>" + i
            + "</span>";
      }
      html += "<span class='down'>down</span>";
      $("#pagetool").html(html);
    },
    pageto : function(pagenum,pagetotal) {
      var pagetoolpagenum=1;
      if(pagenum>5){
        pagetoolpagenum=Math.ceil(pagenum/5);
      }
      $("#pagetool span").hide();
      $("#pagetool span:first").show();
      $("#pagetool span[i='"+pagetoolpagenum+"']").show();
      $("#pagetool span:last").show();
    }
  };
  //模糊搜索
  $.indexsearch=function(indexdata,keyword){
    var resultids=new Array();
     for (var key in $.indexdata){
       if(key.indexOf(keyword)!=-1)
         resultids.push($.indexdata[key]);
      }
     return resultids;
  };
  //跳页程序
  $.pageto=function(pagenum,data,obj){
    var list=data[pagenum];
    var html="";
    obj.html(html);
    obj.parent().show();
    $(list).each(function(i){
      try{
       html+='<li id="'+list[i]+'" >'+$.jsondata[list[i]].JGMC+'</li>';
      }catch(e){}
    });
    obj.html(html);
    obj.find("li").bind({//结果集的点击事件
        "click":function(){
        $.select($(this));
        obj.parent().hide();
        obj.parent().find("#pagetool").html("");
        },
      "mouseover":function(){//结果集的鼠标悬浮事件
        $(this).parent().find("li").css("backgroundColor","white");
        $(this).css("backgroundColor","lightblue");
      }
    });
  };
}(jQuery));

在页面中调用

<div class="item_input fl">
  <input id="reg_companyname" autocomplete="off" type="text" class="text" name="DWBM_SV"/>
  <div id="resultlist" class="hidden" style="width:300px;margin-top: 1px;display:none;">
    <ul></ul>
    <div class="pagetool" id="pagetool"></div>
    </div>
</div>
<script>
    $("#reg_companyname").search({"id":"resultlist","url":"/getcompany.go"});
</script>

运行效果 (不同的效果需要不同的样式)

jQuery基于xml格式数据实现模糊查询及分页功能的方法

Javascript 相关文章推荐
基于jquery tab切换(防止页面刷新)
May 23 Javascript
JS获得QQ号码的昵称,头像,生日的简单实例
Dec 04 Javascript
JavaScript中提前声明变量或函数例子
Nov 12 Javascript
JavaSciprt中处理字符串之sup()方法的使用教程
Jun 08 Javascript
JavaScript判断数组重复内容的两种方法(推荐)
Jun 06 Javascript
快速解决js开发下拉框中blur与click冲突
Oct 10 Javascript
详解基于webpack2.x的vue2.x的多页面站点
Aug 21 Javascript
vuejs使用递归组件实现树形目录的方法
Sep 30 Javascript
vue渲染时闪烁{{}}的问题及解决方法
Mar 28 Javascript
jQuery实现全选、反选和不选功能的方法详解
Dec 04 jQuery
vue组件库的在线主题编辑器的实现思路
Apr 03 Javascript
echarts饼图各个板块之间的空隙如何实现
Dec 01 Javascript
jQuery实现圣诞节礼物传送(花式轮播)
Dec 25 #Javascript
js判断iframe中元素是否存在的实现代码
Dec 24 #Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
Dec 24 #Javascript
web 屏蔽BackSpace键实例代码
Dec 24 #Javascript
js实现的xml对象转json功能示例
Dec 24 #Javascript
jQuery实现的无缝广告图片左右滚动功能详解
Dec 24 #Javascript
浅析BootStrap中Modal(模态框)使用心得
Dec 24 #Javascript
You might like
PHP json_decode函数详细解析
2014/02/17 PHP
标准版Eclipse搭建PHP环境的详细步骤
2015/11/18 PHP
php中实现进程锁与多进程的方法
2016/09/18 PHP
yii框架使用分页的方法分析
2019/07/25 PHP
提高代码性能技巧谈—以创建千行表格为例
2006/07/01 Javascript
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
2010/12/30 Javascript
网站404页面3秒后跳到首页的实例代码
2013/08/16 Javascript
js控制分页打印、打印分页示例
2014/02/08 Javascript
jQuery页面加载初始化常用的三种方法
2014/06/04 Javascript
Jquery中find与each方法用法实例
2015/02/04 Javascript
javascript下拉框选项单击事件的例子分享
2015/03/04 Javascript
把普通对象转换成json格式的对象的简单实例
2016/07/04 Javascript
node.js操作mongodb简单示例分享
2017/05/25 Javascript
浅谈vue项目可以从哪些方面进行优化
2018/05/05 Javascript
微信小程序实现滑动切换自定义页码的方法分析
2018/12/29 Javascript
微信小程序分享功能onShareAppMessage(options)用法分析
2019/04/24 Javascript
vue自定义树状结构图的实现方法
2020/10/18 Javascript
解决removeEventListener 无法清除监听的问题
2020/10/30 Javascript
python使用beautifulsoup从爱奇艺网抓取视频播放
2014/01/23 Python
python中正则的使用指南
2016/12/04 Python
基于DataFrame筛选数据与loc的用法详解
2018/05/18 Python
Python之pymysql的使用小结
2019/07/01 Python
Python 50行爬虫抓取并处理图灵书目过程详解
2019/09/20 Python
python manage.py runserver流程解析
2019/11/08 Python
Django admin禁用编辑链接和添加删除操作详解
2019/11/15 Python
win10系统下python3安装及pip换源和使用教程
2020/01/06 Python
HTML5之SVG 2D入门1—SVG(可缩放矢量图形)概述
2013/01/30 HTML / CSS
求职简历的自我评价怎样写好
2013/10/07 职场文书
毕业生自荐信的主要内容
2013/10/29 职场文书
车间工艺员岗位职责
2013/12/09 职场文书
服装设计专业毕业生求职信
2014/04/09 职场文书
2015年教师新年寄语
2014/12/08 职场文书
3招让你摆脱即兴讲话冷场尴尬
2019/08/08 职场文书
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
2021/03/29 Python
4种非常实用的python内置数据结构
2021/04/28 Python
SQL之各种join小结详细讲解
2021/08/04 MySQL