Posted By

jatkins on 07/13/12


Tagged

search autocomplete trie


Versions (?)

Search autocomplete example


 / Published in: JavaScript
 

Released into the public domain.

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>Trie incremental search test</title>
  6. <script type="text/javascript">
  7. <!--
  8. var trie_test = {
  9. trie: function() {
  10. var root = [];
  11.  
  12. this.add = function(strToAdd) {
  13. var node = root;
  14. for(var i=0;i<strToAdd.length;i++) {
  15. if(!node[strToAdd.charAt(i)])
  16. node[strToAdd.charAt(i)] = [];
  17. node = node[strToAdd.charAt(i)];
  18. }
  19. };
  20.  
  21. this.find = function(strToFind) {
  22. var node = root;
  23. for(var i=0;i<strToFind.length;i++) {
  24. node = node[strToFind.charAt(i)];
  25. if(!node)
  26. return false;
  27. }
  28. return node;
  29. };
  30.  
  31. this.getChildren = function(rootStr) {
  32. var node = root;
  33. for(var i=0;i<rootStr.length;i++)
  34. node = node[rootStr.charAt(i)];
  35.  
  36. return rSearch(node, rootStr, []);
  37. };
  38.  
  39. function rSearch(node, name, names) {
  40. if(Object.keys(node)==0) {
  41. names.push(name);
  42. return names;
  43. }
  44. else {
  45. for(var i=0;i<Object.keys(node).length;i++)
  46. rSearch(node[Object.keys(node)[i]], name + Object.keys(node)[i], names);
  47. return names;
  48. }
  49. }
  50. }
  51. };
  52.  
  53. var testTrie = new trie_test.trie;
  54. function init() {
  55. testTrie.add('Alabama')
  56. testTrie.add('Alaska');
  57. testTrie.add('Arizona');
  58. testTrie.add('Arkansas');
  59. testTrie.add('California');
  60. testTrie.add('Colorado');
  61. testTrie.add('Connecticut');
  62. testTrie.add('Delaware');
  63. testTrie.add('Florida');
  64. testTrie.add('Georgia');
  65. testTrie.add('Hawaii');
  66. testTrie.add('Idaho');
  67. testTrie.add('Illinois');
  68. testTrie.add('Indiana');
  69. testTrie.add('Iowa');
  70. testTrie.add('Kansas');
  71. testTrie.add('Kentucky');
  72. testTrie.add('Louisiana');
  73. testTrie.add('Maine');
  74. testTrie.add('Maryland');
  75. testTrie.add('Massachusetts');
  76. testTrie.add('Michigan');
  77. testTrie.add('Minnesota');
  78. testTrie.add('Mississippi');
  79. testTrie.add('Missouri');
  80. testTrie.add('Montana');
  81. testTrie.add('Nebraska');
  82. testTrie.add('Nevada');
  83. testTrie.add('NewHampshire');
  84. testTrie.add('NewJersey');
  85. testTrie.add('NewMexico');
  86. testTrie.add('NewYork');
  87. testTrie.add('NorthCarolina');
  88. testTrie.add('NorthDakota');
  89. testTrie.add('Ohio');
  90. testTrie.add('Oklahoma');
  91. testTrie.add('Oregon');
  92. testTrie.add('Pennsylvania');
  93. testTrie.add('RhodeIsland');
  94. testTrie.add('SouthCarolina');
  95. testTrie.add('SouthDakota');
  96. testTrie.add('Tennessee');
  97. testTrie.add('Texas');
  98. testTrie.add('Utah');
  99. testTrie.add('Vermont');
  100. testTrie.add('Virginia');
  101. testTrie.add('Washington');
  102. testTrie.add('WestVirginia');
  103. testTrie.add('Wisconsin');
  104. testTrie.add('Wyoming');
  105. }
  106. -->
  107. </script>
  108. </head>
  109. <body onload="init();">
  110. <h1>Trie incremental search test</h1>
  111. <input type="text" id="txtSearch" onkeyup="
  112. document.getElementById('cboSuggestions').innerHTML = '';
  113. var results = testTrie.getChildren(this.value);
  114. if(results) {
  115. document.getElementById('cboSuggestions').size = results.length;
  116. for(var i=0;i<results.length;i++) {
  117. var newResult = document.createElement('option');
  118. newResult.appendChild(document.createTextNode(results[i]));
  119. document.getElementById('cboSuggestions').appendChild(newResult);
  120. }
  121. }" /><br />
  122. <select id="cboSuggestions"></select>
  123. </body>
  124. </html>

Report this snippet  

You need to login to post a comment.