利用contenteditable做一个vue属性的输入框

利用contenteditable做一个vue属性的输入框

  1. contenteditable属性

    这是一个html5 新增的一个属性,可以让你的元素内容可以编辑

    <p contenteditable=true>这是一个可以编辑的段落</p>
    

    那如何获取这个可以编辑的段落呢?我们知道原生js中,找到相应的dom元素,然后我们可以通过innerText和innerHTML获取对应的文本,所以在编辑的段落中,我们可以使用dom.innerText来获取相应的编辑内容

  2. 实现placeholder

    当然我们不至限于想获取一个编辑的内容,我们还需要实现input和textarea等占位提示符。

    • 首先我们把placeholder添加到编辑内容中

      <div contenteditable=true placeholder="添加描述符">
        
      </div>
      
    • 通过css来控制点击显示和隐藏

      div[contenteditable]:empty:not(:focus):before {
        content: attr(placeholder);
        color: #aaa ;
      }
      
  3. 通过vue来实现双向绑定

    对于经常使用vue的人都知道,v-model的双向绑定,其实就是一个语法糖,然后这个语法糖还只能在input select textarea等表单控件中使用,因此我们想手写一个双向绑定

    input的双向绑定

    <input v-model="something">
    

    改变的双向绑定

    <input :value="something" @input="somthing=$event.target.value"
    

    参照上面的我们来实现div的可编辑和双向绑定

    html部分

    <div contenteditable="true" v-text="content" @input="handleInput">
      
    </div>
    

    js

    export default {
      data() {
        return {
          content: ''
        }
      },
      methods: {
        handleInput($event){
          this.content = $event.target.innerText;
          
          // 拓展 如果想要只需要前100位数据
          this.content = this.content.substring(0,100)
        }
      }
    }
    

    最终写的代码地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 5,082评论 0 29
  • 转载 :OpenDiggawesome-github-vue 是由OpenDigg整理并维护的Vue相关开源项目库...
    果汁密码阅读 23,220评论 8 124
  • 那年花开花落,我却不知道原来离别是这么凄惨,相送是需要多么大的勇气······ 我充满好奇和喜悦踏进5班的教室,但...
    易洛阅读 476评论 1 5
  • 遇见是条被污染了的河流 纯粹是奢望的自作多情 自由被亵渎过 好不了 来不及呼啸 悄无声息丢掉的信任 青春打不了的草...
    微笑的百合花阅读 147评论 0 0
  • 距2017年结束还有143天! 【21天超人计划】 每天问一个人Bucket List、2条Tips、3件好物分享...
    小尾巴巨人阅读 242评论 0 0