当前位置:首页 > VUE

vue div input框实现

2026-01-22 23:08:19VUE

实现 Vue 中的 div input 框

在 Vue 中实现一个 div 输入框可以通过多种方式完成,以下是一种常见的方法,结合 contenteditable 属性和 Vue 的数据绑定。

基本实现

创建一个可编辑的 div,并将其内容与 Vue 的数据绑定。

vue div input框实现

<template>
  <div>
    <div 
      contenteditable="true" 
      @input="handleInput"
      v-html="content"
    ></div>
    <p>当前内容: {{ content }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      content: ''
    }
  },
  methods: {
    handleInput(e) {
      this.content = e.target.innerHTML;
    }
  }
}
</script>

使用 v-model 的自定义组件

如果需要更符合 Vue 的使用习惯,可以创建一个自定义组件,支持 v-model

vue div input框实现

<template>
  <div>
    <editable-div v-model="content"></editable-div>
    <p>当前内容: {{ content }}</p>
  </div>
</template>

<script>
export default {
  components: {
    'editable-div': {
      props: ['value'],
      template: `
        <div 
          contenteditable="true"
          @input="update"
          v-html="value"
        ></div>
      `,
      methods: {
        update(e) {
          this.$emit('input', e.target.innerHTML);
        }
      }
    }
  },
  data() {
    return {
      content: ''
    }
  }
}
</script>

处理纯文本内容

如果希望处理纯文本而非 HTML,可以使用 textContent 替代 innerHTML

<template>
  <div>
    <div 
      contenteditable="true" 
      @input="handleInput"
      ref="editableDiv"
    ></div>
    <p>当前内容: {{ content }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      content: ''
    }
  },
  methods: {
    handleInput() {
      this.content = this.$refs.editableDiv.textContent;
    }
  }
}
</script>

添加样式和交互

为可编辑 div 添加样式和交互效果,提升用户体验。

<template>
  <div>
    <div 
      contenteditable="true" 
      @input="handleInput"
      @focus="handleFocus"
      @blur="handleBlur"
      :class="{ 'editing': isEditing }"
      v-html="content"
    ></div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      content: '',
      isEditing: false
    }
  },
  methods: {
    handleInput(e) {
      this.content = e.target.innerHTML;
    },
    handleFocus() {
      this.isEditing = true;
    },
    handleBlur() {
      this.isEditing = false;
    }
  }
}
</script>

<style>
div[contenteditable="true"] {
  border: 1px solid #ccc;
  padding: 8px;
  min-height: 20px;
}
div[contenteditable="true"].editing {
  border-color: #42b983;
}
</style>

这些方法可以根据具体需求进行调整,适用于不同的场景。

标签: vuediv
分享给朋友:

相关文章

vue 实现闪烁

vue 实现闪烁

Vue 实现闪烁效果的方法 方法一:使用 CSS 动画 在 Vue 组件中定义一个闪烁的 CSS 动画,通过绑定 class 或 style 来控制元素的闪烁效果。 <template>…

vue实现博客

vue实现博客

Vue 实现博客的基本步骤 使用 Vue.js 实现一个博客系统可以分为前端和后端两部分。以下是基于 Vue 的前端实现方案,后端可以选择 Node.js、Django 或其他框架。 项目初始化 使…

vue实现抖动

vue实现抖动

Vue 实现抖动效果 在 Vue 中实现抖动效果可以通过 CSS 动画或 JavaScript 动画库来实现。以下是几种常见的方法: 使用 CSS 动画 通过定义 @keyframes 动画并在 V…

vue实现swipe

vue实现swipe

Vue实现Swipe功能的方法 使用第三方库(推荐) Vue生态中有多个成熟的轮播/滑动组件库,例如vue-awesome-swiper或swiper/vue。以下是基于swiper/vue的实现示例…

vue实现computed

vue实现computed

Vue 中 computed 的实现原理 computed 属性是 Vue 的一个核心特性,它基于响应式依赖进行缓存,仅在依赖发生变化时重新计算。以下是 computed 的实现方式: 基本用法 在…

vue实现尺子

vue实现尺子

Vue 实现尺子组件 实现一个尺子组件可以通过 Canvas 或纯 CSS 完成。以下是两种常见实现方式: 使用 Canvas 绘制尺子 通过 Canvas 动态绘制刻度线和数字,适合需要高精度或动…