最近在實現原文/譯文句段高亮對比顯示,和有道翻譯類似,如下圖所示:
最初的解決方案是采用富文本編輯器,把所有句段信息都用HTML標簽包裹,操作空間比較大,頁面上需要的功能幾乎都可以實現,但是由此帶來了許多的弊端,比如:
1.復制文本存在原始格式
2.復制大量文本存在性能問題(富文本編輯器的通病,復制幾十萬文字的文本可能導致頁面崩潰)
3.截取文本操作難度較大...
目前看業界主流的翻譯軟件,都是采用textarea + 富文本組合,這種解決方案可以極大的避免復制文本格式與頁面性能問題,雖然頁面操作空間沒有富文本編輯器大,但是大多數場景是可以滿足要求的。
廢話少說,textarea文本的高亮主要借助於selectionStart/selectionEnd兩個屬性,配合文本的focus即可實現文本的選中效果,MDN有詳細的解釋,如下:
實現代碼如下:
<template> <section> <textarea ref="textarea" name="test" id="" cols="30" rows="10" v-model="txt"></textarea> </section> </template> <script> export default { name: 'i-select', data () { return { txt: '這是一段測試文本', } }, mounted () { let node = this.$refs.textarea node.selectionStart = 0 node.selectionEnd = 5 node.focus() } } </script>
效果如下: