当前位置:首页 > VUE

vue实现查询替换

2026-01-07 03:18:17VUE

Vue 实现查询替换功能

在 Vue 中实现查询替换功能,可以通过数据绑定和字符串操作方法结合实现。以下是具体实现方式:

基础实现

<template>
  <div>
    <textarea v-model="text" placeholder="输入文本内容"></textarea>
    <input v-model="searchText" placeholder="输入要查找的内容">
    <input v-model="replaceText" placeholder="输入替换内容">
    <button @click="replaceAll">全部替换</button>
    <div>{{ resultText }}</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      text: '',
      searchText: '',
      replaceText: '',
      resultText: ''
    }
  },
  methods: {
    replaceAll() {
      if (!this.searchText) return
      this.resultText = this.text.replace(new RegExp(this.searchText, 'g'), this.replaceText)
    }
  }
}
</script>

高级实现(支持区分大小写)

vue实现查询替换

<template>
  <div>
    <textarea v-model="text"></textarea>
    <input v-model="searchText">
    <input v-model="replaceText">
    <label>
      <input type="checkbox" v-model="caseSensitive"> 区分大小写
    </label>
    <button @click="replaceAll">替换</button>
    <div>{{ resultText }}</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      text: '',
      searchText: '',
      replaceText: '',
      resultText: '',
      caseSensitive: false
    }
  },
  methods: {
    replaceAll() {
      if (!this.searchText) return
      const flags = this.caseSensitive ? 'g' : 'gi'
      this.resultText = this.text.replace(new RegExp(this.searchText, flags), this.replaceText)
    }
  }
}
</script>

优化版本(实时高亮显示匹配项)

<template>
  <div>
    <textarea v-model="text"></textarea>
    <input v-model="searchText" @input="highlightMatches">
    <input v-model="replaceText">
    <button @click="replaceAll">替换</button>
    <div v-html="highlightedText"></div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      text: '',
      searchText: '',
      replaceText: '',
      highlightedText: ''
    }
  },
  methods: {
    highlightMatches() {
      if (!this.searchText) {
        this.highlightedText = this.text
        return
      }
      const regex = new RegExp(this.searchText, 'gi')
      this.highlightedText = this.text.replace(regex, match => 
        `<span style="background-color: yellow">${match}</span>`
      )
    },
    replaceAll() {
      if (!this.searchText) return
      const regex = new RegExp(this.searchText, 'gi')
      this.text = this.text.replace(regex, this.replaceText)
      this.highlightMatches()
    }
  },
  watch: {
    text() {
      this.highlightMatches()
    }
  }
}
</script>

组件化实现

vue实现查询替换

可以将查询替换功能封装为可复用组件:

<template>
  <div class="search-replace">
    <slot name="content" :text="processedText">
      <textarea v-model="internalText"></textarea>
    </slot>
    <div class="controls">
      <input v-model="searchQuery" placeholder="查找">
      <input v-model="replaceQuery" placeholder="替换为">
      <button @click="replace">替换</button>
      <button @click="replaceAll">全部替换</button>
    </div>
  </div>
</template>

<script>
export default {
  props: {
    value: String,
    caseSensitive: {
      type: Boolean,
      default: false
    }
  },
  data() {
    return {
      searchQuery: '',
      replaceQuery: '',
      internalText: this.value
    }
  },
  computed: {
    processedText() {
      if (!this.searchQuery) return this.internalText
      const flags = this.caseSensitive ? 'g' : 'gi'
      return this.internalText.replace(
        new RegExp(this.searchQuery, flags),
        `<mark>${this.searchQuery}</mark>`
      )
    }
  },
  methods: {
    replace() {
      // 实现单个替换逻辑
    },
    replaceAll() {
      if (!this.searchQuery) return
      const flags = this.caseSensitive ? 'g' : 'gi'
      this.internalText = this.internalText.replace(
        new RegExp(this.searchQuery, flags),
        this.replaceQuery
      )
      this.$emit('input', this.internalText)
    }
  },
  watch: {
    value(newVal) {
      this.internalText = newVal
    }
  }
}
</script>

使用组件方式:

<template>
  <search-replace v-model="documentContent" />
</template>

<script>
import SearchReplace from './components/SearchReplace.vue'

export default {
  components: {
    SearchReplace
  },
  data() {
    return {
      documentContent: '初始文本内容...'
    }
  }
}
</script>

这些实现方式覆盖了从基础到高级的查询替换功能,可以根据实际需求选择合适的方案。

标签: vue
分享给朋友:

相关文章

vue实现分支

vue实现分支

Vue 实现分支的方法 在 Vue 项目中实现分支功能通常涉及条件渲染、动态组件或路由控制。以下是几种常见的实现方式: 条件渲染(v-if/v-show) 使用 Vue 的指令根据条件显示不同内容…

vue实现安全免登录

vue实现安全免登录

Vue 实现安全免登录的方案 免登录功能通常通过持久化认证状态(如 Token)实现,但需兼顾安全性。以下是基于 Vue 的常见实现方案: 基于 Token 的免登录 登录成功后存储 Token…

vue 实现简单登陆

vue 实现简单登陆

以下是一个使用 Vue 3 实现的简单登录功能示例,包含表单验证和基础交互逻辑: 创建 Vue 组件 <template> <div class="login-contain…

vue实现a

vue实现a

Vue 实现 A 功能的方法 在 Vue 中实现 A 功能可以通过多种方式,具体取决于 A 功能的具体需求。以下是几种常见的实现方法: 使用 Vue 组件 通过创建自定义组件来实现 A 功能。组件可…

vue 实现弹幕

vue 实现弹幕

vue 实现弹幕的方法 使用 CSS 动画和动态渲染 在 Vue 中实现弹幕效果,可以通过动态渲染弹幕元素并结合 CSS 动画实现。以下是具体步骤: 数据准备 创建一个数组存储弹幕数据,每条弹幕…

vue 实现关闭

vue 实现关闭

Vue 实现关闭功能的方法 在Vue中实现关闭功能通常涉及组件销毁、模态框隐藏或路由跳转等场景。以下是几种常见实现方式: 销毁当前组件 使用v-if或v-show控制组件显示/隐藏,适用于局部组件…