当前位置:首页 > JavaScript

js 实现@某人

2026-04-06 03:00:36JavaScript

实现 @某人的功能

在JavaScript中实现@某人功能通常涉及监听用户输入、匹配特定模式(如@符号)并显示匹配的用户列表。以下是实现这一功能的常见方法:

监听输入事件

使用inputkeydown事件监听用户输入,检测是否输入了@符号:

const inputElement = document.getElementById('input');
inputElement.addEventListener('input', (e) => {
    const text = e.target.value;
    const lastChar = text.slice(-1);
    if (lastChar === '@') {
        showUserList(); // 显示用户列表
    }
});

匹配用户列表

根据输入的字符过滤用户列表,通常通过字符串匹配或正则表达式实现:

function filterUsers(query) {
    const users = ['Alice', 'Bob', 'Charlie'];
    return users.filter(user => 
        user.toLowerCase().includes(query.toLowerCase())
    );
}

显示下拉列表

动态生成下拉列表显示匹配的用户:

function showUserList() {
    const dropdown = document.createElement('div');
    dropdown.id = 'user-dropdown';
    // 填充匹配的用户列表
    document.body.appendChild(dropdown);
}

插入选中用户

当用户从列表中选择一个名字时,将其插入输入框:

js 实现@某人

function insertUser(userName) {
    const input = document.getElementById('input');
    const text = input.value;
    const atIndex = text.lastIndexOf('@');
    input.value = text.slice(0, atIndex) + '@' + userName + ' ';
}

高级功能扩展

  • 高亮显示:使用span标签为@提及的用户添加特殊样式。
  • 异步搜索:通过API请求动态加载用户列表。
  • 键盘导航:支持上下箭头选择用户。

完整示例代码

const users = ['Alice', 'Bob', 'Charlie'];
const input = document.getElementById('input');
let dropdown = null;

input.addEventListener('input', (e) => {
    const text = e.target.value;
    const lastAtPos = text.lastIndexOf('@');

    if (lastAtPos >= 0) {
        const query = text.slice(lastAtPos + 1);
        const matchedUsers = filterUsers(query);

        if (matchedUsers.length > 0) {
            if (!dropdown) {
                dropdown = createDropdown();
            }
            updateDropdown(matchedUsers);
        } else if (dropdown) {
            removeDropdown();
        }
    } else if (dropdown) {
        removeDropdown();
    }
});

function filterUsers(query) {
    return users.filter(user => 
        user.toLowerCase().includes(query.toLowerCase())
    );
}

function createDropdown() {
    const div = document.createElement('div');
    div.className = 'user-dropdown';
    document.body.appendChild(div);
    return div;
}

function updateDropdown(users) {
    dropdown.innerHTML = users.map(user => 
        `<div onclick="selectUser('${user}')">${user}</div>`
    ).join('');
}

function selectUser(user) {
    const text = input.value;
    const lastAtPos = text.lastIndexOf('@');
    input.value = text.slice(0, lastAtPos) + '@' + user + ' ';
    removeDropdown();
}

function removeDropdown() {
    if (dropdown) {
        document.body.removeChild(dropdown);
        dropdown = null;
    }
}

注意事项

  • 确保下拉列表的样式和位置与输入框对齐。
  • 处理用户输入中的多个@符号情况。
  • 在移动设备上测试触摸事件兼容性。

标签: js
分享给朋友:

相关文章

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现跑马灯

js实现跑马灯

实现跑马灯效果 使用HTML和JavaScript可以轻松实现跑马灯效果。以下是两种常见的实现方式: HTML结构 <div id="marquee"> <span>…

js进度条实现

js进度条实现

使用HTML和CSS创建基础结构 在HTML中创建一个容器元素用于显示进度条,通常使用<div>元素。CSS用于设置进度条的样式,包括宽度、高度、颜色和圆角等属性。 <div cl…