代码实现:
copy() {let replacedContent = this.form.resTaskBaseInfoDetail.content;let text = readHtml(replacedContent)// #ifdef H5let textarea = document.createElement("textarea")textarea.value = texttextarea.readOnly = "readOnly"document.body.appendChild(textarea)textarea.select() // 选中文本内容textarea.setSelectionRange(0, text.length)uni.showToast({ //提示title: '复制成功',icon: 'success'})document.execCommand("copy")textarea.remove()// #endif// #ifndef H5uni.setClipboardData({data: text, //要被复制的内容success: () => { //复制成功的回调函数uni.showToast({ //提示title: `复制成功`,icon: 'success'})}}, true);// #endif},
工具方法:
// 提取html中文本
export const readHtml = (html) => {// 去掉注释,script,style,textarea,input,实体字符&开头;结尾let res = html.replace(/(<!--)([\s\S]*?)(-->)/g, "").replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,"").replace(/(<style)([\s\S]*?)(\/style>)/g, '').replace(/(<textarea)([\s\S]*?)(\/>)/g, '').replace(/(<input)([\s\S]*?)(\/>)/g, '').replace(/&([\s\S]*?);/g, '')// 提取><中间文字 多空格为一个 ><let result = res.replace(/(?=\<[\s\S]*?)([\s\S]*?)(?=\>)/g, "").replace(/\>/g, " ").replace(/\s+/g, " ")return result
}