当前位置:首页 > VUE

vue div input框实现

2026-01-22 23:08:19VUE

实现 Vue 中的 div input 框

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

基本实现

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

<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

<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 添加样式和交互效果,提升用户体验。

vue div input框实现

<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 实现动态菜单的常见方法 基于路由配置生成菜单 Vue Router 的路由配置可以天然转化为菜单结构,适合权限与路由绑定的系统: // router/index.js const route…

vue slot实现

vue slot实现

vue slot 的实现方法 在 Vue 中,slot 是一种内容分发机制,允许父组件向子组件传递模板内容。以下是几种常见的 slot 实现方式: 默认 slot 默认 slot 是最基础的 slo…

vue 动画 实现

vue 动画 实现

vue 动画实现方法 Vue 提供了多种方式实现动画效果,主要包括过渡动画和动态动画两类。 使用 <transition> 组件实现基础过渡 通过 Vue 内置的 <transit…

vue实现表白

vue实现表白

Vue 实现表白页面 使用 Vue 可以快速创建一个动态、交互式的表白页面。以下是一个简单的实现方案: 基础结构 创建一个 Vue 项目或单文件组件,包含以下核心部分: <template&…

vue滚动实现

vue滚动实现

Vue 滚动实现方法 使用原生滚动 在 Vue 中可以通过 ref 获取 DOM 元素,调用原生滚动方法实现滚动效果。适用于简单场景。 <template> <div ref=…

vue首页实现

vue首页实现

实现Vue首页的基本步骤 创建一个Vue首页通常涉及项目初始化、页面结构设计、路由配置和组件开发。以下是具体实现方法: 初始化Vue项目 使用Vue CLI或Vite快速搭建项目结构: npm i…