当前位置:首页 > 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 添加功能:

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 添加基本样式:

.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 的拖拽排序功能:

js 实现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实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…