当前位置:首页 > JavaScript

js 实现ctrl f

2026-03-01 02:10:55JavaScript

监听键盘快捷键组合

在JavaScript中,可以通过监听keydown事件来检测用户是否按下了Ctrl + F组合键。以下是实现代码示例:

document.addEventListener('keydown', function(event) {
    if (event.ctrlKey && event.key === 'f') {
        event.preventDefault(); // 阻止浏览器默认的查找行为
        openSearchBox(); // 调用自定义搜索函数
    }
});

创建搜索界面

需要创建一个搜索框供用户输入搜索内容。可以通过动态生成DOM元素或直接修改现有HTML结构实现:

<div id="searchBox" style="display: none; position: fixed; top: 10px; right: 10px;">
    <input type="text" id="searchInput" placeholder="搜索...">
    <button id="searchButton">搜索</button>
    <button id="closeButton">关闭</button>
</div>

实现搜索功能

搜索功能可以通过遍历页面文本内容并高亮匹配项来实现:

function performSearch(searchTerm) {
    const elements = document.querySelectorAll('body *:not(script):not(style)');
    let found = false;

    elements.forEach(element => {
        if (element.childNodes.length === 1 && element.childNodes[0].nodeType === Node.TEXT_NODE) {
            const text = element.textContent;
            if (text.includes(searchTerm)) {
                element.innerHTML = element.innerHTML.replace(
                    new RegExp(searchTerm, 'gi'),
                    match => `<span style="background-color: yellow">${match}</span>`
                );
                found = true;
            }
        }
    });

    if (!found) {
        alert('未找到匹配内容');
    }
}

处理搜索框交互

需要为搜索框添加事件处理程序:

function openSearchBox() {
    const searchBox = document.getElementById('searchBox');
    searchBox.style.display = 'block';
    document.getElementById('searchInput').focus();
}

document.getElementById('closeButton').addEventListener('click', function() {
    document.getElementById('searchBox').style.display = 'none';
    // 清除高亮
    document.querySelectorAll('span[style="background-color: yellow"]').forEach(el => {
        const parent = el.parentNode;
        parent.textContent = parent.textContent;
    });
});

document.getElementById('searchButton').addEventListener('click', function() {
    const searchTerm = document.getElementById('searchInput').value;
    if (searchTerm) {
        performSearch(searchTerm);
    }
});

改进搜索性能

对于大型文档,上述方法可能性能不佳。可以考虑以下优化:

// 使用TreeWalker API更高效地遍历文本节点
function optimizedSearch(searchTerm) {
    const walker = document.createTreeWalker(
        document.body,
        NodeFilter.SHOW_TEXT,
        null,
        false
    );

    let found = false;
    let node;

    while (node = walker.nextNode()) {
        const text = node.nodeValue;
        if (text.includes(searchTerm)) {
            const span = document.createElement('span');
            span.style.backgroundColor = 'yellow';
            const parent = node.parentNode;
            parent.replaceChild(span, node);
            span.appendChild(document.createTextNode(text));
            found = true;
        }
    }

    return found;
}

添加导航功能

可以实现查找下一个/上一个匹配项的功能:

let currentHighlightIndex = -1;
let highlights = [];

function navigateSearch(direction) {
    if (highlights.length === 0) return;

    // 移除当前高亮的焦点样式
    if (currentHighlightIndex >= 0) {
        highlights[currentHighlightIndex].style.outline = 'none';
    }

    // 计算新的索引
    currentHighlightIndex = (currentHighlightIndex + direction + highlights.length) % highlights.length;

    // 添加新焦点样式并滚动到元素
    highlights[currentHighlightIndex].style.outline = '2px solid red';
    highlights[currentHighlightIndex].scrollIntoView({ behavior: 'smooth', block: 'center' });
}

// 在performSearch函数中收集所有高亮元素
highlights = Array.from(document.querySelectorAll('span[style="background-color: yellow"]'));

兼容性考虑

确保代码在不同浏览器中正常工作:

js 实现ctrl f

// 使用keyCode作为后备方案
document.addEventListener('keydown', function(event) {
    if (event.ctrlKey && (event.key === 'f' || event.keyCode === 70)) {
        event.preventDefault();
        openSearchBox();
    }
});

标签: jsctrl
分享给朋友:

相关文章

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。 &…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <htm…