在contenteditable的div中的段落文字中获取光标位置,并在光标处插入字符
作者:admin 日期:2021-12-23vue项目中的一个小需求如题,代码整理如下:
Javascript代码
- <template>
- <el-container class="about">
- <el-main>
- <section class="bgBox">
- <h1>在诗句上任意位置点击,再点击“插入字符”按钮,即可在光标处插入字符</h1>
- <div class="h20"></div>
- <el-button type="primary" @click="insertChar">插入字符</el-button>
- <div class="h30"></div>
- <div class="edit" contenteditable>
- <p
- v-for="(item, index) in sentenses"
- :key="item"
- @click="getCurrentSent(index)"
- >
- {{ item }}
- </p>
- </div>
- </section>
- </el-main>
- </el-container>
- </template>
- <script>
- const insertStr = (soure, start, newStr)=>{
- return soure.slice(0, start) + newStr + soure.slice(start);
- }
- import { getTableList, uploadFile } from "@/api/system/api_user";
- export default {
- data() {
- return {
- current_sent: null,
- sentenses: [
- "凌波不过横塘路。但目送、芳尘去。",
- "锦瑟华年谁与度。月桥花院,琐窗朱户。只有春知处。 ",
- "飞云冉冉蘅皋暮。彩笔新题断肠句。若问闲情都几许。",
- "一川烟草,满城风絮。梅子黄时雨。"
- ]
- };
- },
- computed: { },
- methods: {
- getCurrentSent(index) {
- // 获取当前句子
- this.current_sent = index;
- },
- insertChar() {
- // 获取getSelection对象,这个对象有很多内容,自己找到有用的数据
- let select = window.getSelection();
- // 利用insertStr函数,在光标位置插入###三个字符
- let newSent = insertStr(
- this.sentenses[this.current_sent],
- select.anchorOffset - 1,
- "###"
- );
- // 更新sentenses数组视图
- Vue.set(this.sentenses, this.current_sent, newSent);
- }
- }
- };
- </script>
- <style lang="scss"></style>
评论: 0 | 引用: 0 | 查看次数: 3231
发表评论