<thead id="kdfuf"><font id="kdfuf"></font></thead>
<samp id="kdfuf"></samp>
    <nav id="kdfuf"><strong id="kdfuf"></strong></nav>
      中文字幕无码一区二区三区在线,久久精品人人做人人爽,国产一级内射无挡观看,十八禁在线黄色网站,日韩欧美国产另类久久久精品 ,少妇人妻偷人精品一区二区,久久午夜视频,亚洲春色AⅤ无码专区

      jQuery XML 解析器和搜索機制

      2016-10-18    藍藍設計的小編

      如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里

       

      介紹

      這里所描述的過程將使你能夠創建一個簡單的基于jQuery / XML的解析器和搜索機制。此過程將通過一個AJAX請求檢索XML,然后在jQuery中分析數據,為搜索機制做準備。該解決方案將基于不區分大小寫的全部或部分關鍵字匹配地返回結果。來自于關鍵字搜索的返回結果設置將被格式化為一個直接鏈接到相應網站的超鏈接。jQuery搜索方法非常類似于Mike Endale的一個項目,不過增加了一個DOM解析器,正則表達式以及結果集分組。

      背景

      客戶端需要一個簡單的搜索工具來查找基于關鍵字搜索的本地內部網站。關鍵字搜索必須不區分大小寫,并允許返回部分匹配的結果。歸咎于客戶端內容管理系統的架構,因此(SharePoint)只能執行客戶端腳本。其解決方案的另一個障礙是,源數據將來自多個源。數據被存儲在多個Excel電子表格,CSV文件和MS Access數據庫內。這就對我們提出了這樣的需要:開發具有一系列查詢和一個宏的Access解決方案,充當可合并、擦洗,并最后格式化數據作為XML輸出的偽ETL。對于這個解決方案的目的,我們將詳細介紹JavaScript XML分析器的設計,而不是偽Access ETL宏工具的設計。

      使用代碼

      該解決方案的做法是利用一個簡單的基于JavaScript / XML的搜索來發送數據結果到HTML / JavaScript前端。前端將引用腳本:jQuery,XML和CSS文件。XML格式將因為它的可讀性和它是數據交換行業標準格式之一的事實而被使用。 XML數據將通過使用AJAX的客戶端jQuery解析,并通過Internet Explorer 11呈現。

      解決方案將使用RegExp對象來處理關鍵字匹配,驗證和特殊字符處理。RegExp對象字符串將檢查危險語法從而提高解決方案的穩定性和整體可用性。

      我們將默認使用JavaScript分組功能來返回匹配結果作為折疊的紀錄集。折疊的記錄集線項目將被URL鏈接到相關的Project Workspace網站。在擴展的組記錄集下,結果將存在于相關的子記錄中,當通過On Click事件展開的時候。

      信息架構

      解析器函數有一個復雜的帶有節點和屬性的層次XML樹,并且將它轉變成等價的JavaScript對象和屬性。客戶端基于JavaScript / XML的搜索需要經過以下步驟:

      1.偽ETL工具準備數據到XML文件(本項目不包括這一步驟)

      2.此XML文件加載到指定的位置(本項目不包括這一步驟)

      3.在點擊事件發生時,JavaScript解析器將使用AJAX方法加載XML數據

      4.檢查搜索中關鍵字的存在

      • 如果沒有關鍵字存在拋出錯誤消息“Please enter a search keyword”

      5.如果有節點包含URL屬性的字符串,那么節點加入到數組中。

      6.RegExp對象關鍵字通過替代匹配特殊字符處理

      7.RegExp對象關鍵字匹配轉換為不區分大小寫

      8.循環數組匹配基于驗證的RegExp對象

      • 如果沒有結果,那就拋出錯誤消息“No results were found!”

      9.用斑馬條紋的奇數和偶數行對組構建結果集

      10.用相關的Work Order構建組匹配PPID行作為子組

      11.填充結果,然后將它們傳遞到最后呈現的集合

      12.顯示具有列和所有分組標題的結果集合

      • 分組在默認情況下折疊

      用戶界面

      用戶界面是一個簡單的基于HTML / JavaScript客戶端搜索來返回關鍵字匹配結果——默認為折疊和分組的記錄集合。以行項目顯示的折疊紀錄集合直接URL鏈接到相關項目的網站。在擴展組記錄集合下,結果在On Click事件擴大時將保留相關的子記錄。

      內嵌頁面引用

      我們需要做的第一件事是引用我們的腳本:jQuery,XML和CSS文件。

      <link rel="stylesheet" href="path/default.css" /> <script type="text/javascript" src="path/jquery-1.4.2.min.js"></script> <script id="data" type="text/javascript" src="path/search.js" xmlData="data.xml"></script> <input id="term" type="text"/> < input name="Search" id="searchButton" type="button" value="Search"/> <div id="result">< /div>

      你會發現我們已經添加了xmlData屬性到search.js引用。這是傳遞來自于HTML文件的XML文件位置的最佳方式。如果你有你有多個項目xml文件想要用作為數據源的話,那么這就很有幫助。

      XML數據源

      XML數據源可以以任何方式或任何大小來構造;但建議保持源XML文件小于1 MB,以便于保持適當的分析器響應時間。下面是XML源用于此項目的一個例子:

      <?xml version="1.0" encoding="UTF-8"?> <dataroot generated="2015-11-20T10:30" xmlns:od="urn:schemas-microsoft-com:officedata"> <etl> <PPID Lead="Slow,Roy" Description="NORTH OF FAIR" PID="P002"> <WO Description="SHELTON - BANK (SAFETY)" PM="Slow,Roy" Status="CLOSED" WID="305577" WOXREF="SHEL" Program="REINFORCEMENT"> </WO> <Archive>Archived</Archive> <record search="P002NORTH OF FAIRSHELSHELTON 305577SHELTON - BANK (SAFETY)Slow,Roy"/> <url address="P002"/> </PPID> </etl> </dataroot>

      錯誤處理

      對于這個項目,我們已經在兩個關鍵領域使用過錯誤處理。如果沒有關鍵字存在,那么錯誤消息“Please enter a search keyword”將出現。如果沒有個結果生成,則拋出錯誤消息“No results were found!”。

      //Check if a keyword exists if (keyword == '') {
            errMsg += 'Please enter a search keyword';
          } else {
            searchThis();
          }
      if (i == 0) { pub += '< div>'; pub += 'No results were found!'; pub += '< /div>';

      使用jQuery AJAX請求

      我們將通過預定義的能在頁面級別啟用的jQuery庫通過異步JavaScript函數調用XML。 AJAX的全稱是“異Asynchronous JavaScript and XML”,由Jesse James Garrett,Adaptive Path的創始人所杜撰。AJAX依賴于XMLHttpRequest,CSS,DOM和其他技術。AJAX的主要特點是它的“異步”性質,這意味著它可以從服務器而無需刷新頁面來發送和接收數據。在異步模式中,客戶端和服務器會獨立地工作,以及獨立地進行通信,從而允許用戶持續與網頁交互,不管服務器上發生了什么。

      function searchThis() {
        $.ajax({
          type: "GET",
          url: XMLSource,
          dataType: "xml",
          success: function (xml) {
            loadPublication(xml)
          }
        });
      }

      使用DOM解析和正則表達式

      由于jQuery本身不能解析XML字符串;我們將充分利用瀏覽器的DOM解析方法——大多數瀏覽器以這種或那種形式支持。火狐,Chrome,Safari以及的Internet Explorer瀏覽器均支持這種方法,它們都具有DOMParser對象。較早的Internet Explorer瀏覽器(如IE 8)使用其專有的ActiveX對象。可以創建跨瀏覽器的解決方案,來檢查是否缺少DOMParser,但這超出了這個項目的范圍,但是可能以后在額外的跨瀏覽器支持中會添加。

      知道JavaScript RegExp(正則表達式)功能和語法來處理任意特殊字符。同時通過定義正則表達式來忽略大小寫,以便于在關鍵字搜索時更加友好。

      function loadPublication(xmlData) {
        i = 0; var row; var searchExp = ""; var ppid = "P";
      
        $(xmlData).find('PPID').each(function () { // Check if a site URL attr exists if($(this).find('url').attr('address').length) { //Set the search string Variables var record          = $(this).find('record').attr('search'); var archive         = $(this).find('Archive'); //Escape characters in keyword expression and use global match RegExp.escape = function(keyword) { return keyword.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
                    }; //Keyword expression will be case agnostic var exp = new RegExp(keyword, "i"); //Use formated keyword as the default search searchExp = record.match(exp); //If the search expression is not null if (searchExp != null) { //Start building the result if ((i % 2) == 0) {
                    row = 'even';
                    } else {
                    row = 'odd';
                    } if($(this).attr('PID') != ppid) {
                        ppid = $(this).attr('PID');
      
                        i++;

      分組返回結果

      用戶界面是一個簡單的基于HTML / JavaScript客戶端搜索來返回關鍵字匹配結果默認為折疊又分組的記錄集合。以行項目顯示的折疊紀錄集合直接URL鏈接到相關項目的網站。在擴展組記錄集合下,結果在On Click事件擴大時將保留相關的子記錄。

      //Grouping of the results function expgroupby(e) {
          docElts=document.all;
          numElts=docElts.length;
          images = e.getElementsByTagName("IMG");
          img=images[0];
          srcPath=img.src;
          index=srcPath.lastIndexOf("/");
          imgName=srcPath.slice(index+1); var b="auto"; if(imgName=="plus.gif"){
              b="";
              img.src="/_layouts/images/minus.gif" }else{
              b="none";
              img.src="/_layouts/images/plus.gif" }
          oldName=img.name;
          img.name=img.alt;
          spanNode=img; while(spanNode!=null){
              spanNode=spanNode.parentNode; if(spanNode!=null&&spanNode.id!=null&&spanNode.id=="wrapper")break } while(spanNode.nextSibling!=null&&spanNode.nextSibling.id!="wrapper"){
              spanNode=spanNode.nextSibling;
              spanNode.style.display=b;
          }
      }

      完整的源代碼

      下面是這個項目完整的源代碼例子。

      //Full source $(document).ready(function () { //Global Variables var XMLSource = $('#data').attr('xmlData'); var keyword = ''; var pub = ''; var i = 0;
      
        $("#searchButton").click(function () {
          keyword = $("input#term").val(); //Reset any message var errMsg = '';
          pub = ''; //Check if a keyword exists if (keyword == '') {
            errMsg += 'Please enter a search keyword';
          } else {
            searchThis();
          } if (errMsg != '') {
            pub += '< div>';
            pub += errMsg;
            pub += '< /div>';
          } //Show error $('#result').html(pub);
      
        }); //Use enter key to trigger the search query  $("input#term").keypress(function (e) { var key = e.which; if (key == 13){
           $("#searchButton").click(); return false;
          }
        }); function searchThis() {
          $.ajax({
            type: "GET",
            url: XMLSource,
            dataType: "xml",
            success: function (xml) {
              loadPublication(xml)
            }
          });
        } function loadPublication(xmlData) {
          i = 0; var row; var searchExp = ""; var ppid = "P";     
      
          $(xmlData).find('PPID').each(function () { // Check if a site URL attr exists  if($(this).find('url').attr('address').length) { var record   = $(this).find('record').attr('search'); var archive  = $(this).find('Archive'); //Escape characters in keyword expression and use global match  RegExp.escape = function(keyword) { return keyword.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
                      }; //Keyword expression will be case agnostic var exp = new RegExp(keyword, "i"); //Use formated keyword as the default search searchExp = record.match(exp); //If the search expression is not null if (searchExp != null) { //Start building the result if ((i % 2) == 0) {
                  row = 'even';
                      } else {
                  row = 'odd';
                      } if($(this).attr('PID') != ppid) {
                          ppid = $(this).attr('PID');
      
                          i++; //Grouped header row with URL links from the xml attr pub += '< tr id="wrapper"code-string" style="margin: 0px; padding: 0px; border: 0px; color: rgb(128, 0, 128);">'">'   
          + '< td colspan="8">'
          + '< a onclick="javascript:expgroupby(this);return false;" href="javascript:">'
          + '< img name="collapse" alt="expand" src="/_layouts/images/plus.gif" border="0" />< /a>'
          + '< a href="http://project.com/sites/tp/Projects/' + $(this).find('url').attr('address') + '">' + '  ' + $(this).attr('PID')+ ' - ' + $(this).attr('Description') + ' - ' + $(this).attr('Lead') + '< /a>< /td>' + '</tr>';
      
          } //Bottom grouped expand detail fields pub += '<tr id="item" style="display: none;">' + '< td valign="top">' + $(this).find('WO').attr('WID') + '< /td>' + '< td valign="top">' + $(this).find('WO').attr('Description') + '< /td>' + '< td valign="top">' + $(this).find('WO').attr('PM') + '< /td>' + '< td valign="top">' + $(this).find('WO').attr('Status') + '< /td>' + '< td valign="top">' + $(this).find('WO').attr('WOXREF') + '< /td>' + '< td valign="top">' + $(this).find('WO').attr('Program') + '< /td>' + '< td valign="top">' + $(this).find('Archive').text() + '< /td>' + '< /tr>';           
              }
          }
      }); if (i == 0) {
            pub += '< div>';
            pub += 'No results were found!';
            pub += '< /div>'; //Populate the result $('#result').html(pub);
          } else { //Pass the result set showResult(pub);
          }
        } function showResult(resultSet) { //Show the result with the titles of the column fields pub = '< div>There are ' + i + ' results!< /div>';
          pub += '< table id="grid" border="0">';
          pub += '< thead>< tr>< td>< th>PPID - Project Description - Lead PM< /th>< /td>< /tr>';
          pub += '< tr>< th>WO Number< /th>';
          pub += '< th>WO Description< /th>';
          pub += '< th>Project Manager< /th>';
          pub += '< th>Status< /th>';
          pub += '< th>XRef< /th>';
          pub += '< th>Program< /th>';
          pub += '< th>Archive Status< /th>';
          pub += '< /tr>< /thead>';
          pub += '< tbody>';
      
          pub += resultSet;
      
          pub += '< /tbody>';
          pub += '< /table>'; //Populate the results $('#result').html(pub)
      
          $('#grid').tablesorter();
        }
      }); //Grouping of the results function expgroupby(e) {
          docElts=document.all;
          numElts=docElts.length;
          images = e.getElementsByTagName("IMG");
          img=images[0];
          srcPath=img.src;
          index=srcPath.lastIndexOf("/");
          imgName=srcPath.slice(index+1); var b="auto"; if(imgName=="plus.gif"){
              b="";
              img.src="/_layouts/images/minus.gif" }else{
              b="none";
              img.src="/_layouts/images/plus.gif" }
          oldName=img.name;
          img.name=img.alt;
          spanNode=img; while(spanNode!=null){
              spanNode=spanNode.parentNode; if(spanNode!=null&&spanNode.id!=null&&spanNode.id=="wrapper")break } while(spanNode.nextSibling!=null&&spanNode.nextSibling.id!="wrapper"){
              spanNode=spanNode.nextSibling;
              spanNode.style.display=b;
          }
      }
       
       
       

       藍藍設計www.tuitetiyu.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計BS界面設計  cs界面設計  ipad界面設計  包裝設計  圖標定制  用戶體驗 、交互設計、 網站建設 平面設計服務 

       

      日歷

      鏈接

      個人資料

      藍藍設計的小編 http://www.tuitetiyu.cn

      存檔

      主站蜘蛛池模板: 十八禁动漫电影在线播放免费播放 | 国内精品自线在拍| 国产尤物无码一区二区| 无码人妻精品一区二区三区在线| 饶平县| 中国一级黄色片视频网站| 亚洲人成网站在小说| 久久综合五月天婷婷丁香| 国产自产一区二区三区视频| 国产精品久久久福利| 欧美午夜视频| 高清无码日韩精品| 久久99国产精品久久99| 无码男同gv视频在线观看| 国产综合av一区二区三区| 无码任你躁久久久久久牛牛| 国产特级毛片aaaaaa视频| 久久无码精品一区二区三区| 2019中文字幕99国产精品视频| 国产黃色精品三級一区二区 | 亚洲国产精品无码久久九九大片健| 上司部长出轨漂亮人妻| 最新国产精品亚洲| 久久精品国产一区二区| 钟祥市| 国产沙发午睡系列999| 少妇人妻av| 国产JLZZJLZZ视频免费看| 国产自产打屁股sp实践视频| 看免费一级在线播放毛片| 日韩放荡少妇无码视频不卡| 国产一级婬片A片免费下载| 99re久久这里只有国产中文精品| 三级4级全黄60分钟| 日韩无码视频久久| 无码孕妇孕交在线观看| 四虎成人精品国产永久免费无码| 久久精品国产亚洲AV高清色欲| 亚洲一区二区av在线| 日本丰满妇人成熟免费中文字幕 | 亚洲国产欧美日韩欧美特级|