yewanji 2023-05-03 23:14 采纳率: 36.3%
浏览 204
已结题

js普通文本框实现高亮关键字

说下我的需求,有一个输入框,用户可以往里面输入内容,用户可以给内容添加标签,当用户输入#话题 然后后面带上一个空格后,要把这个文字标红,同时还能提取所有的标签,如图所示

img

  • 写回答

6条回答 默认 最新

  • xiaok-cpp C/C++领域新星创作者 2023-05-03 23:33
    关注

    下面是一个简单的实现示例,仅供参考:

    <input type="text" id="myInput">
    <ul id="tagList"></ul>
    
    // 获取输入框和标签列表
    var input = document.getElementById("myInput");
    var tagList = document.getElementById("tagList");
    
    // 定义存储标签的数组
    var tags = [];
    
    // 监听输入框的输入事件
    input.addEventListener("input", function() {
      // 获取输入框中的内容
      var content = input.value;
      
      // 使用正则表达式匹配 # 话题
      var pattern = /#\w+\s/g;
      var matches = content.match(pattern);
      
      // 遍历匹配结果,将匹配的文字标红并添加到标签列表
      if(matches) {
        for(var i = 0; i < matches.length; i++) {
          var match = matches[i];
          var tag = match.substring(1, match.length - 1);
          content = content.replace(match, "<span style='color: red;'>" + match + "</span>");
          if(tags.indexOf(tag) === -1) {
            tags.push(tag);
            tagList.innerHTML += "<li>" + tag + "</li>";
          }
        }
      }
      
      // 更新输入框的内容
      input.value = content;
    });
    
    // 监听标签列表的点击事件,提取对应的标签内容并展示在控制台
    tagList.addEventListener("click", function(e) {
      var target = e.target;
      if(target.tagName === "LI") {
        var index = Array.prototype.indexOf.call(tagList.childNodes, target);
        console.log(tags[index]);
      }
    });
    

    这段代码实现了输入框中的文字匹配 # 话题并标红,同时将匹配到的标签添加到标签列表中,并且可以点击标签列表中的标签提取对应的标签内容。不过这段代码可能还需要根据您的具体需求进行调整。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月8日
  • 创建了问题 5月3日

悬赏问题

  • ¥100 科大讯飞语音唤醒词,unbuntu环境,报错
  • ¥15 可以实现这个有不同背景颜色的九九乘法表吗?
  • ¥50 python写segy数据时出错2
  • ¥20 关于R studio 做精确稳定检验的问题!(语言-r语言)
  • ¥50 用贝叶斯决策方法,设计CAD程序
  • ¥20 关于#目标检测#的问题:(qq收集表到时间才能填写,填写的份数有上限)
  • ¥50 ZYNQ7020双核FLAHS烧写的问题
  • ¥20 ue 5 中想要实现第一人称人物左右行走摆动的效果,摄像头只向右摆动一次(关键词-结点)
  • ¥15 AD9164瞬时带宽1.8G,怎么计算出来?
  • ¥15 鼠标右键,撤销删除 复制 移动,要怎样删除? HKEY_CLASSES_ROOT*\shellex\ContextMenuHandlers 没用