JavaScript输入框中选中文字加粗

首先看看效果图:

大概就是想实现两个功能点:

1输入框中可以随便输入内容

2用户选中文字后点击按钮可以实现文字修饰(加粗)

 

现实现的代码中有1个bug尚未修复:

1 不可加粗已经加粗过的文字(选择已经加粗的和普通文字的混合也不行)

代码的主要内容:

1 计算选中的位置

2 在选中的文字两边加上<b></b>

3 重新渲染输入框的内容

主要代码:

html部分:

<div>
      <el-button @click="getRangeIndex">加粗</el-button>
      <div contenteditable="true" class="input-box" ref="input-box"></div>
</div>

JavaScript部分:

首先这个函数是读取选中文字相关的信息

关于window.getSelection()这个变量的各个参数,这篇博客讲得很详细:

https://www.cnblogs.com/strangerqt/p/3745426.html

getRangeIndex () {
      if (window.getSelection) {
        var selectObject = window.getSelection()
        var preText = this.getpreviousNode(selectObject.anchorNode.previousSibling)
        this.text = selectObject.toString()
        this.textStart = selectObject.anchorOffset + preText
        this.textEnd = selectObject.focusOffset + preText
        this.boldingText()
      }
    },

然后计算选中文字的位置:

getpreviousNode(ele) {
      var preText = 0
      for(var element = ele; element !== null; element = element.previousSibling) {
        if (element.nodeType === 1) {
          preText += element.outerHTML.length
        } else if (element.nodeType === 3) {
          var textString = element.nodeValue
          if (element.nodeValue !== null) {
            preText += element.nodeValue.length
          }
        }
      }
      return preText
    },

最后将文字加入标签,插入相应的位置:

boldingText () {
      var ele = this.$refs['input-box']
      this.inputText = ele.innerHTML
      var text = this.inputText.substring(0, this.textStart) + '<b>' + this.text + '</b>' + this.inputText.substring(this.textEnd)
      ele.innerHTML = text
    },

这样子就是图上的效果了

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值