当前位置:首页 > 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-for 指令用于实现循环渲染列表数据。v-for 可以遍历数组、对象或数字范围,生成动态的 DOM 元素。 遍历数组 使用 v-for 遍历数组时,语法为…

vue实现框架

vue实现框架

Vue 框架实现的核心方法 基础项目搭建 使用 Vue CLI 或 Vite 快速初始化项目。Vue CLI 适合传统项目,Vite 更适合现代轻量级应用。安装后通过命令行工具选择所需配置(如 Rou…

vue实现详情

vue实现详情

Vue 实现详情页的常见方法 使用动态路由 在 Vue Router 中配置动态路由参数,通过 $route.params 获取详情 ID。示例路由配置: { path: '/detail/:i…

vue实现批量

vue实现批量

Vue 实现批量操作的方法 在 Vue 中实现批量操作通常涉及选择多个项目并执行统一处理,例如批量删除、批量更新等。以下是几种常见实现方式: 表格多选批量操作 使用 el-table 配合复选框实现…

vue实现frame

vue实现frame

Vue 中实现 iframe 的方法 在 Vue 中可以通过直接使用 <iframe> 标签或动态绑定 src 属性来实现 iframe 功能。 基本用法 <template&g…

vue实现swiper

vue实现swiper

Vue 中实现 Swiper 的方法 安装 Swiper 依赖 在 Vue 项目中安装 Swiper 和相关依赖: npm install swiper vue-awesome-swiper 全局引…