问题描述:
实施反映在单元格调整批注大小后,原先的换行消失了。见下图
修正
查阅源码,发现是调整大小时读取的文本值有问题。
源码位置:handle.js文件,鼠标松开的回调中有对批注框大小改变进行处理。
源码中是使用jq的text方法获取文本,但是该方法返回的文本是一行,不包含换行符,所以需要有个包含换行符的字符串。
解决办法一
直接获取原生dom的innerText属性就会包含换行符。(渲染出来文本有换行,innerText的值就有换行符。luckysheet中的批注能换行就是因为一对div标签包含一行数据)
// nby 修复调整批注大小后文本换行消失的问题
const domText = luckysheetPostil.currentObj.find(".formulaInputFocus")[0].innerText
d[ps_r][ps_c].ps.value = domText
解决办法二
利用jq的html方法获取包含标签的文本,然后用正则拿到包含标签的内容的数组,最后用换行符拼接为字符串。代码如下:
// nby 修复调整批注大小后文本换行消失的问题
const domText = luckysheetPostil.currentObj.find(".formulaInputFocus").html();
const textReg = /(?<=(<div[^>]*?>)).*?(?=(<\/div>))/g;
const textResultArr = domText.match(textReg)
if(textResultArr != null){
d[ps_r][ps_c].ps.value = textResultArr.join('\n') //有匹配到div标签里面的内容,添加换行符
}else{
d[ps_r][ps_c].ps.value = luckysheetPostil.currentObj.find(".formulaInputFocus").text() //匹配不到走以前的逻辑
}
// nby 修复调整批注大小后文本换行消失的问题 END
总结
如果界面有换行,dom.innerText是包含换行符的