当前位置:首页 > JavaScript

js 实现@某人

2026-04-06 03:00:36JavaScript

实现 @某人的功能

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

监听输入事件

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

js 实现@某人

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

匹配用户列表

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

js 实现@某人

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);
}

插入选中用户

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

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方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码 funct…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js 实现页面刷新

js 实现页面刷新

使用 location.reload() location.reload() 是原生 JavaScript 提供的页面刷新方法。调用该方法会重新加载当前页面,相当于点击浏览器的刷新按钮。 // 基本…