后台查询结果 PDFSearchResult实体类:

  [DataContract(Name = "PDFSearchResult")]public class PDFSearchResult{public PDFSearchResult(string title, string fileUrl){Title = title;FileUrl = fileUrl;}[DataMember(Name = "title")]public string Title { get; set; }[DataMember(Name = "fileUrl")]public string FileUrl { get; set; }}

另外,有一个PagedResult泛型类,PagedResult<T>

  [DataContract(Name = "pagedCollection", Namespace = "")]public class PagedResult<T>{public PagedResult(long totalItems, long pageNumber, long pageSize);[DataMember(Name = "items")]public IEnumerable<T> Items { get; set; }[DataMember(Name = "pageNumber")]public long PageNumber { get; }[DataMember(Name = "pageSize")]public long PageSize { get; }[DataMember(Name = "totalItems")]public long TotalItems { get; }[DataMember(Name = "totalPages")]public long TotalPages { get; }//// Summary://     Calculates the skip size based on the paged parameters specified//// Remarks://     Returns 0 if the page number or page size is zeropublic int GetSkipSize();}

后台,采用Web Api (/api/SearchApi/GetPDFSearchResults/), 返回值类型为 PagedResult<PDFSearchResult>, 是Json类型返回值

在页面表现UI层,有两个tab,左边的tab显示的是页面的搜索结果searchResult, 右边的tab显示的是pdf文件的搜索结果PDFSearchResult

页面SearchResult.cshtml如下:

<section id="searchListing" class="row search"><div><div class="tabs"><ul class="tab"><li data-ui="tab-nav"><a href="#">Web Page Results</a></li><li data-ui="tab-nav"><a href="#">PDF Results</a></li></ul></div><div class="tabContent"><div id="resultsArea" class="search-results" style="display:block;" data-ui="tab-content"><div id="NoResultsMessage" style="display:none;"><p class="results-title">No Results For<strong class="search-term"></strong>'</p></div><div id="HasResultsMessage" style="display:none;"><p class="results-title">Search Results For<strong class="search-term"></strong>'</p></div><div class="results" id="SearchResultsContainer"><article class="row"><a href="#"><div><h2></h2><p></p><p class="link">Read more</p></div></a></article></div><ul class="pagination"><li><a href="#" class="prev"><i class="gi icon-arrow"></i></a></li><li class="page"><a href="#"></a></li><li><a href="#" class="next"><i class="gi icon-arrow"></i></a></li></ul></div><div id="PDFResultArea" class="search-results" style="display:none;" data-ui="tab-content"><div id="NoPDFResultsMessage" style="display:none;"><p class="results-title">No Results For<strong class="search-term"></strong>'</p></div><div id="HasPDFResultsMessage" style="display:none;"><p class="results-title">Search Results For<strong class="search-term"></strong>'</p></div><div class="results" id="SearchPDFResultsContainer"><article class="row"><a href="#"></a></article></div><ul class="pagination"><li><a href="#" class="prev"><i class="gi icon-arrow"></i></a></li><li class="page"><a href="#"></a></li><li><a href="#" class="next"><i class="gi icon-arrow"></i></a></li></ul></div></div></div>
</section>

这里,在页面展示上,应该看上去如下图:

为了在同一个页面,也就是SearchResult.cshtml中实现这个tab功能,我用JQuery写了个tab功能,如下

tab.js

function tabs(state,control,show){$(control + "> li").on(state, function(){$(this).addClass("on").siblings().removeClass("on");var index = $(this).index();$(show + "> div").eq(index).show().siblings().hide();})$(control + "> li").eq(0).attr("class", "on");$(show + "> div").eq(0).show();
}tabs("click", ".tab", ".tabContent");

The css style 如下

.tabs {position: relative;margin-top: 60px;margin-bottom: 20px; }.tabs > ul {list-style: none;border-bottom: 1px solid #c0c0c0;margin-top: 0;padding: 0; }.tabs > ul > li {float: left;margin-bottom: -1px; }[dir="rtl"] .tabs > ul > li {float: right; }.tabs > ul > li a {display: block;line-height: 2;margin-right: .2rem;padding: 0 1rem;border: 1px solid transparent;text-decoration: none;cursor: pointer; }[dir="rtl"] .tabs > ul > li a {margin-right: 0;margin-left: .2rem; }.tabs > ul > li a:hover {background: #fff !important;border: 1px solid #fff !important;color: #ff7900; }.tabs > ul > li > [aria-selected="true"], .tabs > ul > li > [aria-selected="true"]:hover {background: red !important; }.tabs > ul li.on {background-color: #fff;border: 1px solid #c0c0c0;border-bottom-color: transparent;color: #454545;cursor: default; }.tabs > ul li.on a {color: #ff7900; }.tabs > * {display: none; }.tabs > ul,.tabs [tabIndex="0"] {display: block; }

然后,我写了一个Jquery Plugin来实现PDFSearchResult的展示功能,也就是说JSON结果,展示到SearchResult.cshtml页面上

在这个Jquery plugin中,调用ajax来调用web api (/api/SearchApi/GetPDFSearchResults/),返回json结果,展现到web页面上

view.pdfsearch.js

(function ($) {$.fn.PDFSearch = function (options) {return this.each(function () {var pdfSearch = $(this);pdfSearch.pdfResultArea = pdfSearch.find("#PDFResultArea");pdfSearch.noPDFResultMessage = pdfSearch.pdfResultArea.find("#NoPDFResultsMessage");pdfSearch.hasPDFResultMessage = pdfSearch.pdfResultArea.find("#HasPDFResultsMessage");pdfSearch.PDFResultContainer = pdfSearch.pdfResultArea.find("#SearchPDFResultsContainer");pdfSearch.searchPDFResultTemplate = pdfSearch.PDFResultContainer.find("article").clone();pdfSearch.queryField = $("input[name='search']");pdfSearch.searchTermLabel = $(".search-term");pdfSearch.oldTerm = undefined;pdfSearch.term = pdfSearch.queryField.val();//Paging elementspdfSearch.paginationWrapper = pdfSearch.pdfResultArea.find('ul.pagination');pdfSearch.pageTemplate = pdfSearch.paginationWrapper.find('.page').clone();pdfSearch.pagePrevious = pdfSearch.paginationWrapper.find('.prev');pdfSearch.pageNext = pdfSearch.paginationWrapper.find('.next');// Page trackingpdfSearch.pageSize = 10;pdfSearch.pageNumber = 1;pdfSearch.totalPages = 0;// Sets up pagination for search results.pdfSearch.paginate = function (data) {pdfSearch.totalPages = data.totalPages;pdfSearch.paginationWrapper.find('.page').remove();if (pdfSearch.totalPages > 1) {pdfSearch.pagePrevious.toggle(data.pageNumber > 1);pdfSearch.pageNext.toggle(data.pageNumber < pdfSearch.totalPages);for (i = 1; i < pdfSearch.totalPages + 1; i++) {var page = pdfSearch.pageTemplate.clone();var link = page.find('a');if (i == data.pageNumber)page.addClass('active');page.data('page', i);link.text(i);pdfSearch.pageNext.parent().before(page).before('\n\r');}pdfSearch.paginationWrapper.show(0);} else {pdfSearch.paginationWrapper.hide(0);}}pdfSearch.previous = function (evt) {return pdfSearch.goToPage(evt, pdfSearch.pageNumber - 1);}pdfSearch.next = function (evt) {return pdfSearch.goToPage(evt, pdfSearch.pageNumber + 1);}pdfSearch.goToPage = function (evt, pageNumber) {pdfSearch.pageNumber = pageNumber || $(this).data('page');if (pdfSearch.pageNumber > pdfSearch.totalPages) pdfSearch.pageNumber = pdfSearch.totalPages - 1;if (pdfSearch.pageNumber < 1) pdfSearch.pageNumber = 1;pdfSearch.searchPDF();return false;}// filter change handlerpdfSearch.handleQuery = function (evt) {pdfSearch.term = $(this).val();if (pdfSearch.oldTerm != pdfSearch.term) {pdfSearch.oldTerm = pdfSearch.term;pdfSearch.searchPDF();}return false;}pdfSearch.searchPDF = function () {pdfSearch.pdfResultArea.addClass("loading");$.ajax({type: "GET",url: "/umbraco/api/SearchApi/GetPDFSearchResults/",dataType: "json",data: {filter: pdfSearch.term,pageNumber: pdfSearch.pageNumber,pageSize: pdfSearch.pageSize},success: function (data) {pdfSearch.searchTermLabel.text(pdfSearch.term);pdfSearch.noPDFResultMessage.hide();pdfSearch.hasPDFResultMessage.hide();pdfSearch.paginate(data);pdfSearch.PDFResultContainer.empty();if (!data.items || data.items.length == 0) {pdfSearch.noPDFResultMessage.show();}else {// Binding search result to UIfor (var i = 0; i < data.items.length; i++) {var pdfResult = data.items[i];var PdfResultTemplate = pdfSearch.searchPDFResultTemplate.clone();_populatePDFContent(pdfResult, PdfResultTemplate);pdfSearch.PDFResultContainer.append(PdfResultTemplate);}pdfSearch.hasPDFResultMessage.show();}},complete: function () {pdfSearch.searchTermLabel.text(pdfSearch.term);pdfSearch.pdfResultArea.removeClass("loading");}});};_populatePDFContent = function (result, template) {var pdfLinkElem = $(template.find("a"));pdfLinkElem.attr("href", result.fileUrl);pdfLinkElem.attr("target", "_blank");pdfLinkElem.html(result.title);};pdfSearch.queryField.on("keyup", pdfSearch.handleQuery);// Setup pagination triggers.pdfSearch.pagePrevious.on("click", pdfSearch.previous);pdfSearch.pageNext.on("click", pdfSearch.next);// Bind to all future page clicks.pdfSearch.paginationWrapper.on('click', 'li.page', pdfSearch.goToPage);pdfSearch.searchPDF();});}
}(jQuery));$(function () {$('section.search').PDFSearch();});

转载于:https://www.cnblogs.com/wphl-27/p/6892285.html

自己在项目中写的一个Jquery插件和Jquery tab 功能相关推荐

  1. java日志怎么实现_JAVA项目中怎么实现一个通用日志记录功能

    JAVA项目中怎么实现一个通用日志记录功能 发布时间:2020-11-21 17:04:50 来源:亿速云 阅读:53 作者:Leah 今天就跟大家聊聊有关JAVA项目中怎么实现一个通用日志记录功能, ...

  2. c#点击按钮调出另一个窗体_在类库或winform项目中打开另一个winform项目窗体的方法...

    本文实例讲述了在类库或winform项目中打开另一个winform项目窗体的方法.分享给大家供大家参考.具体如下: 一.问题: 假设类库或winform项目为A,另一个winform项目为B.那麽在A ...

  3. 项目中发生的一个奇葩问题

    项目中发生的一个奇葩问题: 现象 本地点击按钮,画面正常,不发生err. 服务器上点按钮,画面报错 列索引无效. 报错信息 org.springframework.jdbc.Uncategorized ...

  4. 在vue项目中引用萤石云播放器插件

    在vue项目中引用萤石云播放器插件 1. 萤石云官方开发文档: https://open.ys7.com/help/31 2. 登录官方网站:https://open.ys7.com/cn/s/ind ...

  5. Spring Boot项目中集成Elasticsearch,并实现高效的搜索功能

    Spring Boot项目中集成Elasticsearch 前言 环境准备 引入依赖 配置Elasticsearch连接信息 定义实体类 定义Elasticsearch操作接口 实现搜索功能 总结 前 ...

  6. 开发一款自动指向特定页面元素的jQuery插件:jQuery PointPoint

    来源:tutorialzine.com          编译:GBin1.com web设计人员感觉目前他们出于一个两难的境地:他们需要创建出优美的用户界面,需要创新并且实用.有时候,尽管我们全力付 ...

  7. jquery插件 (jquery之家)的使用案列,(瀑布流的使用)非常简单

    在我们使用这个插件的时候,我们只需要打开这个网址 ,非常优秀的一个jquery插件库jQuery库_jQuery之家-自由分享jQuery.html5.css3的插件库 使用这个插件库 1.先引入js ...

  8. 在Eclipse中写第一个hibernate小例子

    在hibernate自带的文档中,包含了一个很简单的小例子,不过这个小例子是基于ant的,而且说的不是很详细,不利于新手学习.在这里,我将在Eclipse中实现这个例子,并给出详细的实现步骤.     ...

  9. 今天项目中遇到的一个问题:判断新闻Id是否存在

    今天做项目中,写了个类,中间用于判断新闻是否存在.其中我的记录只有8条,Id分别为7,8,9,10,11,12,13,14,当用sql语句: private const string SQL_SELE ...

最新文章

  1. Linux 手动或自动挂载 NTFS 硬盘
  2. java 将查询到的值 存下_MyBatis3.x 从入门到精通(六)查询
  3. 【Java NIO的深入研究1】缓冲区
  4. Hyper-V 3.0网络虚拟化PART 4:私有交换机
  5. 在危机中呈现转机的网络管理
  6. GHOSTXPSP3系统封装网页图文教程
  7. 利用jsoup进行模拟登录
  8. SQL Server常用查询指令
  9. 有用的在线图片处理网站(证件照替换背景蓝色)
  10. 验证码功能-简单实现
  11. JS中根据入职时间计算工龄
  12. linux 开发面试---基础题1
  13. SOA联姻IMS对3G无线网络是福是祸?
  14. 生成带微信头像的用户二维码
  15. [转载] 晓说——第29期:海上霸主航母(上)
  16. Web防火墙(WAF)是什么?和传统防火墙区别是什么?
  17. 6-3 sdust-Java-模拟主板、USB口、TypeC口、PS2口设备 (20 分)
  18. WindowsForm 入门
  19. ucos系统使用delay函数死机原因
  20. Debian系linux配置wifi连接|笔记本

热门文章

  1. pandas 字段操作
  2. python 装饰器应用
  3. Excel字符串比较(exact)
  4. 组策略之统一修改域中计算机的本地管理员账户和密码和受限制组
  5. 一点感想及AIX如何快速入门到精通(转)
  6. html5 zoom-in,页面打开效果除了slide-in-right,还有哪些?
  7. 一个箱子的梦想_我的世界全自动甘蔗收割机,不用动手,轻松收获一箱子甘蔗...
  8. 安装了pygame、但是在python无法导入_详解有关PyCharm安装库失败的问题的解决方法...
  9. 梅创社c语言答案,c语言程序设计第2版) 教学课件 作者 梅创社答案 第四章答案.docx...
  10. c语言制表符号大全,C语言指令表与符号表;