search.html 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330
  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta charset='utf-8'>
  5. <title>Search - Handsontable</title>
  6. <!--
  7. Loading Handsontable (full distribution that includes all dependencies)
  8. -->
  9. <link data-jsfiddle="common" rel="stylesheet" media="screen" href="../dist/handsontable.css">
  10. <link data-jsfiddle="common" rel="stylesheet" media="screen" href="../dist/pikaday/pikaday.css">
  11. <script data-jsfiddle="common" src="../dist/pikaday/pikaday.js"></script>
  12. <script data-jsfiddle="common" src="../dist/moment/moment.js"></script>
  13. <script data-jsfiddle="common" src="../dist/zeroclipboard/ZeroClipboard.js"></script>
  14. <script data-jsfiddle="common" src="../dist/numbro/numbro.js"></script>
  15. <script data-jsfiddle="common" src="../dist/numbro/languages.js"></script>
  16. <script data-jsfiddle="common" src="../dist/handsontable.js"></script>
  17. <!--
  18. Loading demo dependencies. They are used here only to enhance the examples on this page
  19. -->
  20. <link data-jsfiddle="common" rel="stylesheet" media="screen" href="css/samples.css?20140331">
  21. <script src="js/samples.js"></script>
  22. <script src="js/highlight/highlight.pack.js"></script>
  23. <link rel="stylesheet" media="screen" href="js/highlight/styles/github.css">
  24. <link rel="stylesheet" href="css/font-awesome/css/font-awesome.min.css">
  25. <!--
  26. Facebook open graph. Don't copy this to your project :)
  27. -->
  28. <meta property="og:title" content="Search">
  29. <meta property="og:description"
  30. content="">
  31. <meta property="og:url" content="http://handsontable.com/demo/search.html">
  32. <meta property="og:image" content="http://handsontable.com/demo/image/og-image.png">
  33. <meta property="og:image:type" content="image/png">
  34. <meta property="og:image:width" content="409">
  35. <meta property="og:image:height" content="164">
  36. <link rel="canonical" href="http://handsontable.com/demo/search.html">
  37. <!--
  38. Google Analytics for GitHub Page. Don't copy this to your project :)
  39. -->
  40. <script src="js/ga.js"></script>
  41. </head>
  42. <body>
  43. <div class="wrapper">
  44. <div class="wrapper-row">
  45. <div id="global-menu-clone">
  46. <h1><a href="../index.html">Handsontable</a></h1>
  47. </div>
  48. <div id="container">
  49. <div class="columnLayout">
  50. <div class="rowLayout">
  51. <div class="descLayout">
  52. <div class="pad">
  53. <h2>Search</h2>
  54. <p>
  55. You can easily add the ability to search through Handsontable content, using <code>searchPlugin</code>.
  56. </p>
  57. <p>
  58. See <a href="https://github.com/handsontable/handsontable/wiki/Search-plugin">wiki</a> for an in-depth documentation.
  59. </p>
  60. <ul>
  61. <li><a href="#simplest-use-case">Simplest use case</a></li>
  62. <li><a href="#custom-search-result-class">Custom search result class</a></li>
  63. <li><a href="#custom-query-method">Custom query method</a></li>
  64. <li><a href="#custom-callback">Custom callback</a></li>
  65. </ul>
  66. </div>
  67. </div>
  68. </div>
  69. <div class="rowLayout">
  70. <div class="descLayout">
  71. <div class="pad" data-jsfiddle="example1">
  72. <h2 id="simplest-use-case">Simplest use case</h2>
  73. <input id='search_field' type="search" placeholder="Search" />
  74. <div id="example1"></div>
  75. </div>
  76. </div>
  77. <div class="codeLayout">
  78. <div class="pad">
  79. <div class="jsFiddle">
  80. <button class="jsFiddleLink" data-runfiddle="example1">Edit in jsFiddle</button>
  81. </div>
  82. <style data-jsfiddle="example1">
  83. [type="search"] {
  84. margin: 0 0 10px;
  85. }
  86. </style>
  87. <script data-jsfiddle="example1">
  88. var
  89. data = [
  90. ['Nissan', 2009, 'black', 'black'],
  91. ['Nissan', 2006, 'blue', 'blue'],
  92. ['Chrysler', 2004, 'yellow', 'black'],
  93. ['Volvo', 2012, 'yellow', 'gray']
  94. ],
  95. example = document.getElementById('example1'),
  96. searchFiled = document.getElementById('search_field'),
  97. hot;
  98. hot = new Handsontable(example, {
  99. data: data,
  100. colHeaders: true,
  101. search: true
  102. });
  103. function onlyExactMatch(queryStr, value) {
  104. return queryStr.toString() === value.toString();
  105. }
  106. Handsontable.dom.addEvent(searchFiled, 'keyup', function (event) {
  107. var queryResult = hot.search.query(this.value);
  108. console.log(queryResult);
  109. hot.render();
  110. });
  111. </script>
  112. </div>
  113. </div>
  114. </div>
  115. <div class="rowLayout">
  116. <div class="descLayout">
  117. <div class="pad" data-jsfiddle="example2">
  118. <h2 id="custom-search-result-class">Custom search result class</h2>
  119. <input id='search_field2' type="search" placeholder="Search" />
  120. <div id="example2"></div>
  121. </div>
  122. </div>
  123. <div class="codeLayout">
  124. <div class="pad">
  125. <div class="jsFiddle">
  126. <button class="jsFiddleLink" data-runfiddle="example2">Edit in jsFiddle</button>
  127. </div>
  128. <style data-jsfiddle="example2">
  129. .htCore td.customClass {
  130. background: #1E90FF;
  131. color: #f8f8ff;
  132. }
  133. </style>
  134. <script data-jsfiddle="example2">
  135. var data = [
  136. ["Nissan", 2009, "black", "black"],
  137. ["Nissan", 2006, "blue", "blue"],
  138. ["Chrysler", 2004, "yellow", "black"],
  139. ["Volvo", 2012, "white", "gray"]
  140. ]
  141. , example2 = document.getElementById("example2");
  142. var hot2 = new Handsontable(example2,{
  143. data: data,
  144. colHeaders: true,
  145. search: {
  146. searchResultClass: 'customClass'
  147. }
  148. });
  149. var searchFiled2 = document.getElementById('search_field2');
  150. Handsontable.dom.addEvent(searchFiled2,'keyup', function (event) {
  151. var queryResult = hot2.search.query(this.value);
  152. console.log(queryResult);
  153. hot2.render();
  154. });
  155. </script>
  156. </div>
  157. </div>
  158. </div>
  159. <div class="rowLayout">
  160. <div class="descLayout">
  161. <div class="pad" data-jsfiddle="example3">
  162. <h2 id="custom-query-method">Custom query method</h2>
  163. <input id='search_field3' type="search" placeholder="Search" />
  164. <div id="example3"></div>
  165. </div>
  166. </div>
  167. <div class="codeLayout">
  168. <div class="pad">
  169. <div class="jsFiddle">
  170. <button class="jsFiddleLink" data-runfiddle="example3">Edit in jsFiddle</button>
  171. </div>
  172. <script data-jsfiddle="example3">
  173. var data = [
  174. ["Nissan", 2009, "black", "black"],
  175. ["Nissan", 2006, "blue", "blue"],
  176. ["Chrysler", 2004, "yellow", "black"],
  177. ["Volvo", 2012, "white", "gray"]
  178. ]
  179. , example3 = document.getElementById("example3");
  180. var onlyExactMatch = function (queryStr, value) {
  181. return queryStr.toString() === value.toString();
  182. };
  183. var hot3 = new Handsontable(example3,{
  184. data: data,
  185. colHeaders: true,
  186. search: {
  187. queryMethod: onlyExactMatch
  188. }
  189. });
  190. var searchFiled3 = document.getElementById('search_field3');
  191. Handsontable.dom.addEvent(searchFiled3,'keyup', function (event) {
  192. var queryResult = hot3.search.query(this.value);
  193. console.log(queryResult);
  194. hot3.render();
  195. });
  196. </script>
  197. </div>
  198. </div>
  199. </div>
  200. <div class="rowLayout">
  201. <div class="descLayout">
  202. <div class="pad" data-jsfiddle="example4">
  203. <h2 id="custom-callback">Custom callback</h2>
  204. <input id='search_field4' type="search" placeholder="Search" /> <span id="resultCount">0</span> results
  205. <div id="example4"></div>
  206. </div>
  207. </div>
  208. <div class="codeLayout">
  209. <div class="pad">
  210. <div class="jsFiddle">
  211. <button class="jsFiddleLink" data-runfiddle="example4">Edit in jsFiddle</button>
  212. </div>
  213. <script data-jsfiddle="example4">
  214. var data = [
  215. ["Nissan", 2009, "black", "black"],
  216. ["Nissan", 2006, "blue", "blue"],
  217. ["Chrysler", 2004, "yellow", "black"],
  218. ["Volvo", 2012, "white", "gray"]
  219. ]
  220. , example4 = document.getElementById("example4");
  221. var searchResultCount = 0;
  222. var searchResultCounter = function (instance, row, col, value, result) {
  223. Handsontable.Search.DEFAULT_CALLBACK.apply(this, arguments);
  224. if (result) {
  225. searchResultCount++;
  226. }
  227. };
  228. var hot4 = new Handsontable(example4,{
  229. data: data,
  230. colHeaders: true,
  231. search: {
  232. callback: searchResultCounter
  233. }
  234. });
  235. var searchFiled4 = document.getElementById('search_field4');
  236. var resultCount = document.getElementById('resultCount');
  237. Handsontable.dom.addEvent(searchFiled4, 'keyup', function (event) {
  238. searchResultCount = 0;
  239. var queryResult = hot4.search.query(this.value);
  240. console.log(queryResult);
  241. resultCount.innerText = searchResultCount.toString();
  242. hot4.render();
  243. });
  244. </script>
  245. </div>
  246. </div>
  247. </div>
  248. <div class="footer-text">
  249. </div>
  250. </div>
  251. </div>
  252. </div>
  253. </div>
  254. <div id="outside-links-wrapper"></div>
  255. </body>
  256. </html>