当前位置:首页 > 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"]'));

兼容性考虑

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

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

js 实现ctrl f

标签: jsctrl
分享给朋友:

相关文章

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div c…

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Pa…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…