OneLook Quick Click

Makes all words longer than 4 characters in the 'Usually means' section of OneLook.com clickable for quick searching.

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         OneLook Quick Click
// @namespace    onelook
// @version      0.1.1
// @description  Makes all words longer than 4 characters in the 'Usually means' section of OneLook.com clickable for quick searching.
// @match        https://www.onelook.com/?w=*
// @match        https://onelook.com/?w=*
// @license      MIT
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // 找到包含 "Usually means:" 的容器 div
    const inBriefDiv = document.querySelector('div.ol_inbrief');
    if (!inBriefDiv) {
        return; // 如果頁面上沒有這個區塊,就直接退出
    }

    // 找到作為標記的標題 span
    const titleSpan = inBriefDiv.querySelector('span.ol_inbrief_title');
    if (!titleSpan) {
        return; // 如果沒有標題,也退出
    }

    // 取得容器中所有的子節點 (包括文字、<a> 標籤等)
    const allNodes = Array.from(inBriefDiv.childNodes);
    // 找到標題 span 在所有子節點中的位置
    const titleIndex = allNodes.indexOf(titleSpan);

    // 從標題後面的節點開始遍歷,這樣就不會動到 "Usually means:" 本身
    for (let i = titleIndex + 1; i < allNodes.length; i++) {
        const node = allNodes[i];

        // 我們只處理純文字節點 (nodeType === 3)
        // 這樣可以完美避開已經存在的 <a> 連結或其他 HTML 元素
        if (node.nodeType === Node.TEXT_NODE && node.textContent.trim().length > 0) {

            // 創建一個 DocumentFragment 來存放處理後的新節點,這樣可以減少對 DOM 的操作次數
            const fragment = document.createDocumentFragment();

            // 使用 split 保留分隔符 (空格、標點),這樣可以完整重現原始文本結構
            const parts = node.textContent.split(/(\b\w+\b)/);

            parts.forEach(part => {
                // 判斷這個部分是不是一個長度大於4的單字
                if (/\b\w{5,}\b/.test(part)) {
                    const link = document.createElement('a');
                    link.href = `https://www.onelook.com/?w=${part}`;
                    link.textContent = part;

                    // 應用您期望的「不明顯」樣式
                    link.style.textDecoration = 'none';
                    link.style.color = 'inherit';
                    link.onmouseover = () => { link.style.textDecoration = 'underline'; };
                    link.onmouseout = () => { link.style.textDecoration = 'none'; };

                    fragment.appendChild(link);
                } else {
                    // 如果不是,就將原樣的文字 (空格、標點、短單字) 加回去
                    fragment.appendChild(document.createTextNode(part));
                }
            });

            // 用我們處理好的 fragment 替換掉原始的文字節點
            node.parentNode.replaceChild(fragment, node);
        }
    }
})();