search.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. var ipt;
  2. var ser;
  3. var bot;
  4. var oul;
  5. var callback = null;
  6. var sealsData;
  7. var seals = {};
  8. /* 取li */
  9. var lis = document.getElementsByTagName("li");
  10. function setSeals(sealsData) {
  11. this.sealsData = sealsData;
  12. this.seals = sealsData.seals;
  13. }
  14. function deepCopy(source) {
  15. var result = {};
  16. for ( var key in source) {
  17. result[key] = typeof source[key] === 'object' ? deepCopy(source[key])
  18. : source[key];
  19. }
  20. return result;
  21. }
  22. function getSeal() {
  23. var keyData = deepCopy(sealsData);
  24. var seal = [];
  25. if (ipt !== null && ipt.value != null) {
  26. var j = 0;
  27. for ( var i in seals) {
  28. if (ipt.value == seals[i].signname) {
  29. seal[j] = seals[i];
  30. j++;
  31. }
  32. }
  33. }
  34. keyData.seals = seal;
  35. return keyData;
  36. }
  37. function bindDOM(iptid, serid, botid, oulid, cb) {
  38. ipt = document.getElementById(iptid);
  39. ser = document.getElementById(serid);
  40. bot = document.getElementById(botid);
  41. oul = document.getElementById(oulid);
  42. callback = cb;
  43. callback(sealsData);
  44. ipt.oninput = function() {
  45. var ss = ipt.value;
  46. addScript();
  47. var data = [];
  48. if (callback !== undefined && callback !== null && sealsData !== undefined
  49. && sealsData !== null && sealsData.seals !== undefined && sealsData.seals !== null) {
  50. var signseals = sealsData.seals;
  51. for (var i = 0, j = 0; i < signseals.length; ++i) {
  52. if (ss == "") {
  53. data[j] = signseals[i].signname;
  54. seals[signseals[i].signname] = signseals[i];
  55. j++;
  56. } else if (signseals[i].signname.match(ss)) {
  57. data[j] = signseals[i].signname;
  58. seals[signseals[i].signname] = signseals[i];
  59. j++;
  60. }
  61. }
  62. }
  63. queryList(data);
  64. }
  65. ipt.onfocus = function() {
  66. var ss = ipt.value;
  67. addScript();
  68. var data = [];
  69. if (callback !== undefined && callback !== null && sealsData !== undefined
  70. && sealsData !== null && sealsData.seals !== undefined && sealsData.seals !== null) {
  71. var signseals = sealsData.seals;
  72. for (var i = 0, j = 0; i < signseals.length; ++i) {
  73. if (ss == "") {
  74. data[j] = signseals[i].signname;
  75. j++;
  76. } else if (signseals[i].signname.match(ss)) {
  77. data[j] = signseals[i].signname;
  78. j++;
  79. }
  80. }
  81. }
  82. queryList(data);
  83. }
  84. }
  85. function queryList(data) {
  86. ss = document.getElementsByTagName("script_search")[0];
  87. document.body.removeChild(ss)
  88. var arr = data;
  89. oul.innerHTML = "";
  90. if (arr.length == 0) {
  91. bot.style.display = "none";
  92. } else {
  93. bot.style.display = "block";
  94. }
  95. for (var i = 0; i < arr.length; i++) {
  96. var li = document.createElement("li");
  97. li.innerHTML = arr[i];
  98. li.onclick = function() {
  99. ipt.value = this.innerHTML;
  100. oul.innerHTML = "";
  101. bot.style.display = "none";
  102. }
  103. oul.appendChild(li);
  104. }
  105. }
  106. function addScript() {
  107. var s = document.createElement("script_search");
  108. document.body.appendChild(s);
  109. }
  110. /* 按键 */
  111. var i = 0;
  112. document.onkeydown = function(ev) {
  113. if (bot.style.display == "block") {
  114. var kcode = window.event.keyCode || ev.keyCode;
  115. if (kcode == 40) {
  116. for (var j = 0; j < lis.length; j++) {
  117. if (lis[j].className == "sel") {
  118. lis[j].className = "";
  119. }
  120. }
  121. if (i < lis.length) {
  122. lis[i].className = "sel";
  123. i++;
  124. if (i == lis.length) {
  125. i = 0;
  126. }
  127. }
  128. }
  129. if (kcode == 38) {
  130. m = 0
  131. for (; m < lis.length; m++) {
  132. if (lis[m].className == "sel") {
  133. lis[m].className = "";
  134. break;
  135. }
  136. }
  137. i = m;
  138. if (m > 0) {
  139. lis[m - 1].className = "sel";
  140. } else {
  141. lis[lis.length - 1].className = "sel";
  142. }
  143. }
  144. if (kcode == 13) {
  145. for (var n = 0; n < lis.length; n++) {
  146. if (lis[n].className == "sel") {
  147. ipt.value = lis[n].innerHTML;
  148. }
  149. }
  150. bot.style.display = "none";
  151. }
  152. } else {
  153. i = 0;
  154. m = 0;
  155. }
  156. }