如何在JavaScript / HTML / CSS中处理具有跨度的关键字框

如何解决如何在JavaScript / HTML / CSS中处理具有跨度的关键字框

我正在尝试构建数量可变的关键字框(关键字框的数量由php处理)。 为了更好地理解,我制作了三个硬编码的html关键字框。 最终结果应该是多个关键字框,它们可以处理多个关键字,并在单独的内部框中的每个ENTER之后显示它们。如果我单击按钮,则应该提醒所有关键字。

我目前的尝试几乎奏效。您可以键入关键字,然后按Enter键将其存储。 但是,仅在再次点击关键字框后,才会显示内部关键字框。

如果有人可以帮助我解决这个问题,我将不胜感激。 :)

address is now 0,0
read 130
begins with a 1,so table[0,0] <- 30
write table[0,0] -> 30
address is now 0,30
read 130
begins with a 1,30] <- 30
write table[0,30] -> 30
address is now 30,so table[30,30] <- 30
write table[30,30] -> 30
address is still 30,30
read 0
is 0,so don't update table
write table[30,30
read 135
begins with a 1,30] <- 35
write table[30,30] -> 35
address is now 30,35
let tags = [];

let tagContainer = document.querySelectorAll('.tag-container');
tagContainer.forEach(function(foo) {
  foo.addEventListener('click',(e) => {
    //console.log(e.target.tagName);

    //if (e.target.tagName === 'I') {
    var tagLabel = e.target.getAttribute('data-item');
    var index = tags.indexOf(tagLabel);
    tags = [...tags.slice(0,index),...tags.slice(index + 1)];
    foo.querySelectorAll('.tag').forEach(tag => {
      tag.parentElement.removeChild(tag);
    });
    tags.slice().reverse().forEach(tag => {
      var div = document.createElement('div');
      div.setAttribute('class','tag');
      var span = document.createElement('span');
      span.innerHTML = tag;
      var closeIcon = document.createElement('i');
      closeIcon.innerHTML = 'close';
      closeIcon.setAttribute('class','material-icons');
      closeIcon.setAttribute('data-item',tag);
      div.appendChild(span);
      div.appendChild(closeIcon);
      foo.prepend(div);
    });
    //}
  })
});

let input = document.querySelectorAll('.tag-container input');
input.forEach(function(bar) {
  bar.addEventListener('keyup',(e) => {
    if (e.key === 'Enter') {
      e.target.value.split(',').forEach(tag => {
        tags.push(tag);
      });
      bar.querySelectorAll('.tag').forEach(tag => {
        tag.parentElement.removeChild(tag);
      });
      tags.slice().reverse().forEach(tag => {
        var div = document.createElement('div');
        div.setAttribute('class','tag');
        var span = document.createElement('span');
        span.innerHTML = tag;
        var closeIcon = document.createElement('i');
        closeIcon.innerHTML = 'close';
        closeIcon.setAttribute('class','material-icons');
        closeIcon.setAttribute('data-item',tag);
        div.appendChild(span);
        div.appendChild(closeIcon);
        bar.prepend(div);
      });
      bar.value = '';
    }
    bar.focus();
  })

});

function clicked() {
  alert(JSON.stringify(tags));
}
.container {
  width: 20%;
  margin: 40px;
  align-self: center;
}

.tag-container {
  border: 2px solid #ccc;
  padding: 10px;
  border-radius: 5px;
  display: flex;
}

.tag-container .tag {
  padding: 5px;
  border: 1px solid #ccc;
  display: flex;
  align-items: center;
  margin: 5px;
  border-radius: 3px;
  background: #f2f2f2;
  box-shadow: 0 0 4px rgba(0,0.2),inset 0 1px 1px #fff;
  cursor: default;
}

.tag i {
  font-size: 16px;
  margin-left: 5px;
}

.tag-container input {
  flex: 1;
  font-size: 16px;
  padding: 5px;
  outline: none;
  border: 0;
}

re

解决方法

const tagContainerNodes = document.querySelectorAll(".tag-container");
tagContainerNodes.forEach((tagContainerNode) => {
  const input = tagContainerNode.querySelector("input");
  input.addEventListener("keyup",e => {
    if (e.key === "Enter") {
      createTag(e.target.value,tagContainerNode,input);
      e.target.value = "";
    }
  });
});

function createTag(tagName,parent,before) {
  var div = document.createElement("div");
  div.setAttribute("class","tag");
  var span = document.createElement("span");
  span.innerHTML = tagName;
  div.appendChild(span);
  parent.insertBefore(div,before)
}

function clicked() {
  const allTagText = [];
  tagContainerNodes.forEach((tagContainerNode) => {
    const tagNodes = tagContainerNode.querySelectorAll(".tag");
    tagNodes.forEach((tagNode) => {
      allTagText.push(tagNode.textContent);
    });
  });
  console.log(allTagText);
}
.tag-container {
  border: 2px solid #ccc;
  padding: 10px;
  border-radius: 5px;
  display: flex;
}

.tag-container .tag {
  padding: 5px;
  border: 1px solid #ccc;
  margin: 5px;
  border-radius: 3px;
  background: #f2f2f2;
  box-shadow: 0 0 4px rgba(0,0.2),inset 0 1px 1px #fff;
}

.tag-container input {
  font-size: 16px;
  padding: 5px;
  outline: none;
  border: 0;
}
<div class="tag-container">
  <input id="input_search" />
</div>
<button type="button" onclick="clicked()">Button</button>

<div class="tag-container">
  <input id="input_search" />
</div>
<button type="button" onclick="clicked()">Button</button>

<div class="tag-container">
  <input id="input_search" />
</div>
<button type="button" onclick="clicked()">Button</button>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-