Replace Div with Dropdown

Replace specific div with a dropdown list

  1. // ==UserScript==
  2. // @name Replace Div with Dropdown
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.0
  5. // @description Replace specific div with a dropdown list
  6. // @match *://his.kaauh.org/lab/*
  7. // @grant none
  8. // ==/UserScript==
  9.  
  10. // ==UserScript==
  11. // @name AG Grid Column Filter with Auto Restore
  12. // @namespace http://tampermonkey.net/
  13. // @version 1.3
  14. // @description Save and restore AG Grid column filter automatically
  15. // @author You
  16. // @match https://his.kaauh.org/lab/*
  17. // @grant none
  18. // ==/UserScript==
  19.  
  20. (function() {
  21. 'use strict';
  22.  
  23. const PAGE_URL = "/lab-orders/lab-test-analyzer"; // Target page
  24. let lastSelectedColumn = localStorage.getItem("agFilterColumn") || "";
  25. let lastFilterValue = localStorage.getItem("agFilterValue") || "";
  26.  
  27. function getAgHeaders() {
  28. let headers = document.querySelectorAll('.ag-header-cell-text');
  29. return Array.from(headers).map(header => header.innerText.trim()).filter(text => text !== "");
  30. }
  31.  
  32. function applyFilter(columnName, filterValue) {
  33. let columnIndex = getAgHeaders().indexOf(columnName);
  34. if (columnIndex === -1) return;
  35.  
  36. let filterInputs = document.querySelectorAll('.ag-floating-filter-input');
  37. if (filterInputs[columnIndex]) {
  38. filterInputs[columnIndex].value = filterValue;
  39. filterInputs[columnIndex].dispatchEvent(new Event('input', { bubbles: true }));
  40. }
  41. }
  42.  
  43. function saveFilterSelection(column, value) {
  44. localStorage.setItem("agFilterColumn", column);
  45. localStorage.setItem("agFilterValue", value);
  46. }
  47.  
  48. function createFilterControls() {
  49. if (document.getElementById('agFilterDropdown')) return;
  50.  
  51. let container = document.createElement('div');
  52. container.style.position = 'fixed';
  53. container.style.top = '10px';
  54. container.style.right = '10px';
  55. container.style.zIndex = '1000';
  56. container.style.padding = '10px';
  57. container.style.background = 'white';
  58. container.style.border = '1px solid #ccc';
  59. container.style.borderRadius = '5px';
  60.  
  61. let dropdown = document.createElement('select');
  62. dropdown.id = 'agFilterDropdown';
  63. dropdown.style.marginRight = '5px';
  64.  
  65. let defaultOption = document.createElement('option');
  66. defaultOption.text = '🔽 Select Column';
  67. defaultOption.value = '';
  68. dropdown.appendChild(defaultOption);
  69.  
  70. let headers = getAgHeaders();
  71. headers.forEach(header => {
  72. let option = document.createElement('option');
  73. option.text = header;
  74. option.value = header;
  75. dropdown.appendChild(option);
  76. });
  77.  
  78. let input = document.createElement('input');
  79. input.id = 'agFilterInput';
  80. input.type = 'text';
  81. input.placeholder = 'Enter filter value';
  82. input.style.marginRight = '5px';
  83.  
  84. let applyButton = document.createElement('button');
  85. applyButton.innerText = '🔍 Apply';
  86. applyButton.onclick = () => {
  87. let selectedColumn = dropdown.value;
  88. let filterValue = input.value;
  89. if (selectedColumn && filterValue) {
  90. applyFilter(selectedColumn, filterValue);
  91. saveFilterSelection(selectedColumn, filterValue);
  92. }
  93. };
  94.  
  95. container.appendChild(dropdown);
  96. container.appendChild(input);
  97. container.appendChild(applyButton);
  98. document.body.appendChild(container);
  99.  
  100. // Restore last saved filter
  101. if (lastSelectedColumn && lastFilterValue) {
  102. dropdown.value = lastSelectedColumn;
  103. input.value = lastFilterValue;
  104. applyFilter(lastSelectedColumn, lastFilterValue);
  105. }
  106. }
  107.  
  108. function observePageChange() {
  109. let lastUrl = location.href;
  110. setInterval(() => {
  111. if (location.href !== lastUrl) {
  112. lastUrl = location.href;
  113. if (location.href.includes(PAGE_URL)) {
  114. setTimeout(() => {
  115. createFilterControls();
  116. if (lastSelectedColumn && lastFilterValue) {
  117. applyFilter(lastSelectedColumn, lastFilterValue);
  118. }
  119. }, 2000);
  120. }
  121. }
  122. }, 1000);
  123. }
  124.  
  125. window.addEventListener('load', () => {
  126. setTimeout(createFilterControls, 2000);
  127. observePageChange();
  128. });
  129.  
  130. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址