当前位置:首页 > JavaScript

js 实现tag

2026-04-06 16:10:18JavaScript

实现 Tag 功能的 JavaScript 方法

动态生成 Tag 元素

使用 DOM 操作动态创建 Tag 元素并添加到页面中。以下是一个基础实现:

function createTag(text) {
  const tag = document.createElement('span');
  tag.className = 'tag';
  tag.textContent = text;

  const closeBtn = document.createElement('span');
  closeBtn.className = 'tag-close';
  closeBtn.innerHTML = '×';
  closeBtn.onclick = () => tag.remove();

  tag.appendChild(closeBtn);
  return tag;
}

// 使用示例
document.getElementById('tag-container').appendChild(createTag('JavaScript'));

输入框生成 Tag

结合输入框实现交互式 Tag 添加功能:

js 实现tag

const input = document.getElementById('tag-input');
input.addEventListener('keydown', (e) => {
  if (e.key === 'Enter' && input.value.trim()) {
    const tag = createTag(input.value.trim());
    document.getElementById('tag-container').appendChild(tag);
    input.value = '';
  }
});

样式设计

为 Tag 添加基本样式:

js 实现tag

.tag {
  display: inline-flex;
  align-items: center;
  background: #e0e0e0;
  border-radius: 16px;
  padding: 4px 12px;
  margin: 4px;
  font-size: 14px;
}

.tag-close {
  margin-left: 8px;
  cursor: pointer;
  user-select: none;
}

数据存储与获取

存储 Tag 数据并支持从数组生成:

// 从数组生成 Tags
function renderTags(tags) {
  const container = document.getElementById('tag-container');
  container.innerHTML = '';
  tags.forEach(text => container.appendChild(createTag(text)));
}

// 获取当前所有 Tags
function getTags() {
  return Array.from(document.querySelectorAll('.tag'))
    .map(tag => tag.firstChild.textContent.trim());
}

高级功能扩展

实现 Tag 的拖拽排序功能:

let draggedTag = null;

document.querySelectorAll('.tag').forEach(tag => {
  tag.draggable = true;

  tag.addEventListener('dragstart', () => {
    draggedTag = tag;
    setTimeout(() => tag.style.opacity = '0.4', 0);
  });

  tag.addEventListener('dragend', () => {
    setTimeout(() => tag.style.opacity = '1', 0);
    draggedTag = null;
  });
});

document.getElementById('tag-container').addEventListener('dragover', e => {
  e.preventDefault();
  const afterElement = getDragAfterElement(e.clientX);
  if (afterElement) {
    afterElement.parentNode.insertBefore(draggedTag, afterElement);
  } else {
    container.appendChild(draggedTag);
  }
});

function getDragAfterElement(x) {
  const tags = [...document.querySelectorAll('.tag:not(.dragging)')];
  return tags.find(tag => {
    const rect = tag.getBoundingClientRect();
    return x < rect.left + rect.width / 2;
  });
}

这些方法提供了从基础到高级的 Tag 实现方案,可以根据具体需求进行组合或扩展。

标签: jstag
分享给朋友:

相关文章

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

js轮播图实现原理

js轮播图实现原理

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

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…