美文网首页
vue 点击按钮控制文本框内容,且文本框可以删除按钮对应文字的

vue 点击按钮控制文本框内容,且文本框可以删除按钮对应文字的

作者: 黎明的叶子 | 来源:发表于2022-07-28 18:24 被阅读0次
image.png

需求:点击上面的按钮可以显示在文本框,并且光标放在某个位置,删除的时候可以直接删除整体,比如放在本金的哪里,可以直接删除本金两个字。
实现代码如下:

//vue 完整代码
<template>
  <div>
    <el-form> 
      <el-form-item label="按钮" :label-width="formLabelWidth">
        <template v-for="logicSymbol in logicSymbols">
          <el-button
            type="blue"
            size="small"
            :key="`${logicSymbol.itemCode}`"
            @click="HandelClick(logicSymbol.itemName)"
            >{{ logicSymbol.itemName }}</el-button
          >
        </template> 
      </el-form-item>
      <el-form-item label="公式" :label-width="formLabelWidth">
           <div
          style="margin-left:30px;border: 1px solid red"
          ref="dialogTxtCon"
          id="dialogTxtCon"
          contentEditable="true"
          v-html="htmlText"
          @blur="textHtmlChanged"
        /> 
      </el-form-item>

      <el-button type="blue" size="small" @click="btnHandelClick()"
        >确定</el-button
      >
    </el-form>
  </div>
</template>

<script>
export default {
  props: {
    date: {
      type: String,
      default: function () {
        return "";
      },
    },
    name: {
      type: String,
      default: function () {
        return "";
      },
    },
    province: {
      type: String,
      default: function () {
        return "";
      },
    },
  },

  data() {
    return {
      input:'',
      formLabelWidth: "240",
      logicSymbols: [
        {
          itemName: "本金",
          itemCode: "1",
        },
        {
          itemName: "年利率",
          itemCode: "2",
        },
        {
          itemName: "利润",
          itemCode: "3",
        },
        {
          itemName: "计算规则1",
          itemCode: "4",
        }, 
      ],
      htmlText: '',
    };
  },
  components: {},
  computed: {},
  mounted() {}, 
  methods: {
    HandelClick(str) { 
      const html  = `&nbsp;<span contentEditable="false"> ${str} </span>&nbsp; ` 
      this.$refs.dialogTxtCon.focus(); // focus 输入框,否则会跟随光标追加 html
      const sel = window.getSelection(); 
      // Selection 选区对象,表示用户选择的文本范围或光标的当前位置
      if (sel.getRangeAt && sel.rangeCount) {
        let range = sel.getRangeAt(0); // 包含当前选区内容的区域对象
        range.deleteContents(); // Range.deleteContents(): 移除来自 Document 的 Range 内容
        const el = document.createElement("div"); // 生成一个 div
        el.innerHTML = html; // div 里的内容为上面定义的要添加的元素
        const frag = document.createDocumentFragment();
        let node, lastNode;
        while ((node = el.firstChild)) {
          // 把生成 div 里的内容,即 html,移到 frag 里
          lastNode = frag.appendChild(node);
        }  
        range.insertNode(frag);

        if (lastNode) {
          range = range.cloneRange();
          range.setStartAfter(lastNode);
          range.collapse(true);
          sel.removeAllRanges(); 
          sel.addRange(range);
        }
      }
    },
    btnHandelClick() {
      let innerText = document.getElementById("dialogTxtCon").innerText;
      let innerHTML = document.getElementById("dialogTxtCon").innerHTML;
      console.log(innerText);
      console.log(innerHTML);
    },
    textHtmlChanged(e) {
      // console.log(e)
      // this.htmlText = e.target.innerHTML;
    },
  },
  destroyed() {
    console.log("reuseChild destroyed");
  },
};
</script>

相关文章

  • jquery 示例 - todolist(计划列表)实例

    功能说明 在文本框输入内容,点击增加按钮,则下方的列表会增加添加项 点击删除按钮,则删除该项 点击向下箭头,位置顺...

  • addTarget方式和UITextFieldDelegate方

    如图所示: 在开发中,一般都要监听账号对应的输入文本框和密码对应的文本框同时有值,才能让登录按钮可以点击,这个时候...

  • 一道前端面试题目

    题目: 某个应用模块由文本框 input,以及按钮 A,按钮 B 组成。点击按钮 A,会向地址 urlA 发出一个...

  • 2021-03-23

    交流步骤1:客户端 1:给发送按钮绑定点击事件,在触发点击的时候,获取文本框的内容,在文本框有值的时候,向sock...

  • 解决vue内blur方法先于click事件执行问题

    在vue项目中,表单的文本框带离开焦点验证,进入页面后,不小心触发了当前焦点,再点击返回按钮。发现先验证文本框的离...

  • 操作元素--表单元素

    利用DOM可以操作如下表单元素的属性 点击按钮将密码切换为文本框,并可以查看密码明文分析:1.点击眼睛按钮,把密码...

  • RACObserve 和 rac_textSignal 的搭配使

    项目中有个小需求,文本框与按钮绑定.当文本框内容符合规则的时候,按钮才会可用.把判定条件修改一下,代码如下: 但是...

  • 第四天

    1、Form:包裹标签,action:# Input:文本框,单选按钮,多选按钮。提交的按钮,按钮,重置的按钮。 ...

  • 表单

    文本框: 密码框: 单选框: 复选框: 作为按钮: 不可点击的按钮: 可提交按钮: 多行文本域: (cols="3...

  • FreeCodeCamp弹幕的一些随记

    HTML 栅格水平居中 输入文本框 按钮(onclick定义点击调用js函数) CSS overflow-x可以隐...

网友评论

      本文标题:vue 点击按钮控制文本框内容,且文本框可以删除按钮对应文字的

      本文链接:https://www.haomeiwen.com/subject/imeqwrtx.html