RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1411122
Accepted
Ruport
Ruport
Asked:2022-07-18 16:23:25 +0000 UTC2022-07-18 16:23:25 +0000 UTC 2022-07-18 16:23:25 +0000 UTC

单击鼠标时从输入文本字段中删除单词

  • 772

有一个申请表:

<form name="search" action="/search" method="POST">
<input type="text" id="searchText" name="searchText">
<button id="submit" type="submit"></button>
</form>

输入字段中的单词由用户手动输入,并以空格分隔。

问题:如何(并且可能)使用 JS / JQuery 在鼠标单击时从文本字段中删除任何单词?

例如:输入中的文字是“米色衣柜”。用户点击单词“compartment”并将其移除,保留在文本框“closet beige”中。

也许应该使用其他一些构造?

javascript jquery
  • 3 3 个回答
  • 85 Views

3 个回答

  • Voted
  1. EzioMercer
    2022-07-18T17:27:32Z2022-07-18T17:27:32Z

    你可以这样试试:

    const input = document.querySelector('#t1');
    
    input.addEventListener('click', e => {
      const target = e.target;
      const clickPosition = target.selectionStart;
      const value = target.value;
      const splitSymbol = ' ';
      let wordStartPosirion = 0;
      let wordEndPosition = value.length;
    
    
      for (let i = clickPosition; i >= 0; --i) {
        if (i === 0) {
          wordStartPosirion = 0;
          break;
        } else if (value[i] === splitSymbol) {
          wordStartPosirion = i + 1;
          break;
        }
      }
    
      for (let i = clickPosition; i < value.length; ++i) {
        if (i === value.length - 1) {
          wordEndPosition = value.length;
          break;
        } else if (value[i] === splitSymbol) {
          wordEndPosition = i;
          break;
        }
      }
      
      const word = value.slice(wordStartPosirion, wordEndPosition);
      
      e.target.value = value.replaceAll(word, (matchedWord, i) => {
        if (i === wordStartPosirion) return '';
        
        return matchedWord;
      });
    });
    <input type="text" id="t1" value="abcd sdsds abcd">

    • 2
  2. Вася Воронцов
    2022-07-18T17:06:20Z2022-07-18T17:06:20Z

    检查兼容性:selectionStart.

    var searchText;
    
    window.onload = init;
    
    function init() {
        searchText = document.getElementById("searchText");
        searchText.onpointerup = function() {
            let text = searchText.value;
            let cursorPos = searchText.selectionStart;
            searchText.value = cutString(text, cursorPos, " ");
        }
    }
    
    function cutString(string, position, delimiter) {
        if (position == string.length) return string;
        let hasNext = true, hasPrev = true;
        let prevSpacePos = string.lastIndexOf(delimiter, position);
        if (prevSpacePos == -1) {
            hasPrev = false;
            prevSpacePos = 0;
        }
        let nextSpacePos = string.indexOf(delimiter, position);
        if (nextSpacePos == -1) {
            hasNext = false;
            nextSpacePos = string.length;
        }
        return string.slice(0, hasNext? hasPrev? prevSpacePos+1 : prevSpacePos : prevSpacePos) + string.slice(hasNext? nextSpacePos+1 : nextSpacePos);
    }
    <form name="search" action="/search" method="POST">
        <input type="text" id="searchText" name="searchText">
        <button id="submit" type="submit">Субмит</button>
    </form>

    • 1
  3. Best Answer
    Laukhin Andrey
    2022-07-18T17:45:08Z2022-07-18T17:45:08Z

    RegExp for\S+将为我们提供单词和索引:

    searchText.onclick = (e) => {
      let input = e.target;
      let pos   = input.selectionStart;
      let words = Array.from(input.value.matchAll(/\S+/g));
    
      let index = words.findIndex(v => pos > v.index && pos < v.index + v[0].length);
    
      if (index > -1) {
        let start = words[index].index;
        let count = words[index][0].length;
    
        let letters = [...input.value];
        letters.splice(start, count + 1);
    
        input.value = letters.join('').trimRight();
      }
    };
    <form name="search" action="/search" method="POST">
      <input type="text" id="searchText" name="searchText" value="hello crazy man crazy hello">
      <button id="submit" type="submit">Submit</button>
    </form>

    添加
    要使其在双击时工作:

    searchText.ondblclick = (e) => {
      ...
    

    通过按右键:

    searchText.oncontextmenu = (e) => {
      event.preventDefault();
      ...
    
    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5