纯前端实现:用JavaScript构建离线Python内置函数查询工具

凌晨两点半
凌晨两点半
发布时间:2026-10-12 | 3人浏览过
原创

本文介绍如何利用纯JavaScript和HTML构建一个无需网络连接的Python内置函数查询工具。通过将函数数据嵌入DOM节点,结合键盘事件监听与动态标签生成,实现输入即搜、上下键切换的交互体验。该方案适用于本地学习环境,代码结构清晰,适合前端初学者参考实践。

近期在深入研习Python语言过程中,发现其内置函数库庞大且功能丰富。然而,日常查询这些内置函数时往往依赖网络搜索,这给离线环境下的编码学习带来了不便。是否存在一种无需联网即可在本地运行的查询小工具?经检索网络资源未找到合适方案,遂决定自主开发。该工具借鉴了此前基于JavaScript开发的8086汇编指令查询工具的设计思路,仅需对原有代码进行少量调整即可实现。

一、程序效果展示

当用户在输入框键入字符时,系统会自动弹出匹配的下拉列表。用户可通过键盘的向上(↑)和向下(↓)方向键在列表中上下移动,以选中并查看特定的Python内置函数,具体交互效果如下图所示。

二、程序编写过程

(一)为确保工具的便携性与易用性,整个应用封装在单个HTML文件中。所有数据均通过<div></div>标签存储,并直接以Python内置函数的名称作为div的id属性,例如:<div id="abs()">。这种设计使得后续可以通过id属性快速定位并获取对应的函数信息。

例如,以下代码片段展示了数据存储的结构:

<div id="abs"> 返回一个数的绝对值。 参数可以是整数、浮点数或任何实现了 __abs__() 的对象。 如果参数是一个复数,则返回它的模。
</div>

(二)程序核心逻辑包括获取用户在input输入框中键入的字符,并在每次输入时立即启动字符串匹配算法。匹配过程从左至右进行,且不区分字母大小写。匹配成功的结果将通过JavaScript的document.createElement("label")方法动态生成多个label标签,从而构成下拉列表。主要实现代码如下:

function chooseMenu() {
            //获得输入框的值
            var str = document.getElementById("input").value;
            //获得标签名为div的数组,把首地址给divs
            var divs = document.getElementsByTagName("div");
            var div_di;
            var templabel;
            var _style_top = 0;
            //把choose层里面的子节点清空
            clearAllNode($("choose"));
            if (str != "") {
                //如果输入框的值不为空,执行以下循环
                for (var i = 2; i < divs.length; i++) {
                    //getAttribute方法获得divs[i]节点属性id的值
                    div_id = divs[i].getAttribute("id");
                    //如果字串str在主串div_id中出现在第0个位置则添加一个innerHTML为div_id的div到
                    //choose层
                    if (div_id.toLowerCase().indexOf(str.toLowerCase()) == 0) {
 
                        templabel = document.createElement("label");
                        templabel.className = "suggestions";
                        templabel.innerHTML = div_id;
                        templabel.style.visibility = "visible";
                        templabel.style.top = _style_top * 20 + "px";
                        templabel.style.position="absolute"
                        $("choose").appendChild(templabel);
                        _style_top++
                    }
                }
                //添加完choose层的元素后更新show层的元素
                if ($("choose").firstChild) {
                    show($("choose").firstChild.innerHTML);
                    $("choose").firstChild.style.backgroundColor = "ccc";
                    count = 0;
                } else {
                    show("");
                    $("choose").innerHTML = "couldn't find";
                }
            } else {
                show("");
            }
        }

(三)系统监听键盘的↑和↓事件,并调用相应的键盘事件处理函数,使选中状态在label的前后兄弟节点间移动,同时更新右侧详细信息面板的内容。

1)利用<body οnkeydοwn="handleUpAndDown()">为整个页面添加键盘监听事件。<body οnkeydοwn="handleUpAndDown()">

2)编写handleUpAndDown(evt)键盘响应函数。需注意,charCode=38对应键盘↑键,charCode=40对应键盘↓键。当检测到charCode为38时,调用moveUp()函数;当charCode为40时,调用moveDown()函数。moveDown()和moveUp()函数分别负责实现左侧Label列表的上下移动效果。

 function moveUp() {
            var labels = document.getElementsByTagName("label");
            if (count != 0) {
                labels[count].style.backgroundColor = "#fff";
                labels[count - 1].style.backgroundColor = "#ccc";
                show(labels[count - 1].innerHTML);
                $("input").value = labels[count - 1].innerHTML;
                count = count - 1;
            }
        }
 
        function moveDown() {
            var labels = document.getElementsByTagName("label");
            if (count != labels.length - 1) {
                labels[count].style.backgroundColor = "#fff";
                labels[count + 1].style.backgroundColor = "#ccc";
                show(labels[count + 1].innerHTML);
                $("input").value = labels[count + 1].innerHTML;
                count = count + 1;
            }
        }
 
        function handleUpAndDown(evt) {
            evt = (evt) ? evt : event;
            var charCode = (evt.charCode) ? evt.charCode :
                ((evt.which) ? evt.which : evt.keyCode);
            if (charCode == 38)
                moveUp();
            if (charCode == 40)
                moveDown();
        }

3)使用οnkeyup="handleKeyUpEvent(event)"为Input输入框绑定键盘事件,具体代码配置如下:<input type="text" name="input" id="input" maxlength="10" style="width:100px;height:20px;"οnkeyup="handleKeyUpEvent(event)">

在此处输入要查找的指令,可使用键盘↑和↓键移动选择指令

4)编写handleKeyUpEvent(evt)函数,旨在避免用户在Input输入框中输入文字时,受到之前添加的全局键盘事件的干扰。

function handleKeyUpEvent(evt) {//用来处理键盘事件的函数
            evt = (evt) ? evt : event;
            var charCode = (evt.charCode) ? evt.charCode :
                ((evt.which) ? evt.which : evt.keyCode);
            if (charCode == 38 || charCode == 40 || charCode == 37 || charCode == 39) {
                
            } else {
                chooseMenu();
            }
        }

至此,关于利用JavaScript编写Python内置函数查询工具的详细介绍完毕。如需了解更多相关JavaScript与Python内置函数查询工具的内容,欢迎查阅本站历史文章或继续浏览后续相关文章,希望本文能对各位有所帮助。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表