Replace Div with Dropdown

Replace specific div with a dropdown list

// ==UserScript==
// @name         Replace Div with Dropdown
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Replace specific div with a dropdown list
// @match        *://his.kaauh.org/lab/*
// @grant        none
// ==/UserScript==

// ==UserScript==
// @name         AG Grid Column Filter with Auto Restore
// @namespace    http://tampermonkey.net/
// @version      1.3
// @description  Save and restore AG Grid column filter automatically
// @author       You
// @match        https://his.kaauh.org/lab/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    const PAGE_URL = "/lab-orders/lab-test-analyzer"; // Target page
    let lastSelectedColumn = localStorage.getItem("agFilterColumn") || "";
    let lastFilterValue = localStorage.getItem("agFilterValue") || "";

    function getAgHeaders() {
        let headers = document.querySelectorAll('.ag-header-cell-text');
        return Array.from(headers).map(header => header.innerText.trim()).filter(text => text !== "");
    }

    function applyFilter(columnName, filterValue) {
        let columnIndex = getAgHeaders().indexOf(columnName);
        if (columnIndex === -1) return;

        let filterInputs = document.querySelectorAll('.ag-floating-filter-input');
        if (filterInputs[columnIndex]) {
            filterInputs[columnIndex].value = filterValue;
            filterInputs[columnIndex].dispatchEvent(new Event('input', { bubbles: true }));
        }
    }

    function saveFilterSelection(column, value) {
        localStorage.setItem("agFilterColumn", column);
        localStorage.setItem("agFilterValue", value);
    }

    function createFilterControls() {
        if (document.getElementById('agFilterDropdown')) return;

        let container = document.createElement('div');
        container.style.position = 'fixed';
        container.style.top = '10px';
        container.style.right = '10px';
        container.style.zIndex = '1000';
        container.style.padding = '10px';
        container.style.background = 'white';
        container.style.border = '1px solid #ccc';
        container.style.borderRadius = '5px';

        let dropdown = document.createElement('select');
        dropdown.id = 'agFilterDropdown';
        dropdown.style.marginRight = '5px';

        let defaultOption = document.createElement('option');
        defaultOption.text = '🔽 Select Column';
        defaultOption.value = '';
        dropdown.appendChild(defaultOption);

        let headers = getAgHeaders();
        headers.forEach(header => {
            let option = document.createElement('option');
            option.text = header;
            option.value = header;
            dropdown.appendChild(option);
        });

        let input = document.createElement('input');
        input.id = 'agFilterInput';
        input.type = 'text';
        input.placeholder = 'Enter filter value';
        input.style.marginRight = '5px';

        let applyButton = document.createElement('button');
        applyButton.innerText = '🔍 Apply';
        applyButton.onclick = () => {
            let selectedColumn = dropdown.value;
            let filterValue = input.value;
            if (selectedColumn && filterValue) {
                applyFilter(selectedColumn, filterValue);
                saveFilterSelection(selectedColumn, filterValue);
            }
        };

        container.appendChild(dropdown);
        container.appendChild(input);
        container.appendChild(applyButton);
        document.body.appendChild(container);

        // Restore last saved filter
        if (lastSelectedColumn && lastFilterValue) {
            dropdown.value = lastSelectedColumn;
            input.value = lastFilterValue;
            applyFilter(lastSelectedColumn, lastFilterValue);
        }
    }

    function observePageChange() {
        let lastUrl = location.href;
        setInterval(() => {
            if (location.href !== lastUrl) {
                lastUrl = location.href;
                if (location.href.includes(PAGE_URL)) {
                    setTimeout(() => {
                        createFilterControls();
                        if (lastSelectedColumn && lastFilterValue) {
                            applyFilter(lastSelectedColumn, lastFilterValue);
                        }
                    }, 2000);
                }
            }
        }, 1000);
    }

    window.addEventListener('load', () => {
        setTimeout(createFilterControls, 2000);
        observePageChange();
    });

})();

QingJ © 2025

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