Vue使用div模拟input框,并实现vue双向绑定

这篇博客介绍了如何利用HTML的contenteditable属性将div转化为可编辑区域,通过设置属性和监听input、focus、blur事件,实现内容的实时更新与编辑状态的控制。示例代码展示了在Vue中应用这一特性的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 利用div的contenteditable属性,该属性设置为true可以使div可以进行编辑

<template>
    <div class="h-edit-head-content-title edit-div" contenteditable="true" v-text="content"
         @input="changeText"
         @focus="isLocked = true"
         @blur="isLocked = false"
    >
    </div>
</template>

<script>
    module.exports ={
        name: 'editor',
        props: ['value'],
        model: {
            prop: 'value',
            event: 'input',
        },
        data() {
            return {
                content: this.value, //编辑器内容
                isLocked: false
            }
        },
        methods: {
            changeText(){

                //this.content = this.$el.innerHTML;
                this.$emit('input',this.$el.innerHTML);
            }
        }, watch: {
            'value'(){
                if (!this.isLocked || !this.content) {
                    this.content = this.value;
                    //console.log(this.content);
                }
            }
        }

    }
</script>


<style >

    .params .el-form-item__content{
        line-height: 0px !important;
        position: relative;
        font-size: 14px;
    }

    .edit-div {
        width: 100%;
        height: 100%;
        overflow: auto;
        word-break: break-all;
        outline: none;
        user-select: text;
        white-space: pre-wrap;
        text-align: left;
    }
    .edit-div[contenteditable=true] {
        user-modify: read-write-plaintext-only;
    }
    .edit-div[contenteditable=true]:empty:before {
        content: attr(placeholder);
        display: block;
        color: #ccc;
    }
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值