diff --git a/package.json b/package.json
index 5dd4d6e..70470dc 100644
--- a/package.json
+++ b/package.json
@@ -39,6 +39,7 @@
"@babel/runtime": "^7.12.1",
"dayjs": "^1.9.6",
"esbuild": "^0.11.6",
+ "escape-html": "^1.0.3",
"flatpickr": "^4.6.6",
"jquery": "^2.2.4",
"numeral": "^2.0.6",
diff --git a/src/controllers/searchReplace.js b/src/controllers/searchReplace.js
index 48d6b12..6789497 100644
--- a/src/controllers/searchReplace.js
+++ b/src/controllers/searchReplace.js
@@ -12,8 +12,8 @@ import tooltip from '../global/tooltip';
import func_methods from '../global/func_methods';
import Store from '../store';
import locale from '../locale/locale';
-import {checkProtectionLockedRangeList,checkProtectionAllSelected,checkProtectionSelectLockedOrUnLockedCells,checkProtectionNotEnable,checkProtectionLocked} from './protection';
-
+import {checkProtectionLocked} from './protection';
+import escapeHtml from "escape-html";
//查找替换
const luckysheetSearchReplace = {
@@ -338,27 +338,27 @@ const luckysheetSearchReplace = {
}
let searchAllHtml = '';
-
+
for(let i = 0; i < searchIndexArr.length; i++){
let value_ShowEs = valueShowEs(searchIndexArr[i].r, searchIndexArr[i].c, Store.flowdata).toString();
if(value_ShowEs.indexOf("") > -1 && value_ShowEs.indexOf(">") > -1){
searchAllHtml += '
' +
- '' + Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)].name + '' +
+ '' + escapeHtml(Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)].name) + '' +
'' + chatatABC(searchIndexArr[i].c) + (searchIndexArr[i].r + 1) + '' +
- '' + value_ShowEs + '' +
+ '' + escapeHtml(value_ShowEs) + '' +
'
';
}
else{
searchAllHtml += '' +
'' + Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)].name + '' +
'' + chatatABC(searchIndexArr[i].c) + (searchIndexArr[i].r + 1) + '' +
- '' + value_ShowEs + '' +
+ '' + escapeHtml(value_ShowEs) + '' +
'
';
}
}
- $(''+ locale_findAndReplace.searchTargetSheet +''+locale_findAndReplace.searchTargetCell+''+locale_findAndReplace.searchTargetValue+'
' + searchAllHtml + '
').appendTo($("#luckysheet-search-replace"));
+ $(`${locale_findAndReplace.searchTargetSheet}${locale_findAndReplace.searchTargetCell}${locale_findAndReplace.searchTargetValue}
${searchAllHtml}
`).appendTo($("#luckysheet-search-replace"));
$("#luckysheet-search-replace #searchAllbox .boxItem").eq(0).addClass("on").siblings().removeClass("on");
@@ -370,34 +370,39 @@ const luckysheetSearchReplace = {
selectHightlightShow();
},
getSearchIndexArr: function(searchText, range){
- let arr = [];
- let obj = {};
+ const arr = [];
+ const obj = {};
- //正则表达式匹配
- let regCheck = false;
- if($("#luckysheet-search-replace #regCheck input[type='checkbox']").is(":checked")){
- regCheck = true;
- }
+ const $container = $("#luckysheet-search-replace");
+ const isChecked = (inputId) => $container.find(`#${inputId} input[type='checkbox']`).is(":checked");
+ //正则表达式匹配
+ const regCheck = isChecked("regCheck");
//整词匹配
- let wordCheck = false;
- if($("#luckysheet-search-replace #wordCheck input[type='checkbox']").is(":checked")){
- wordCheck = true;
+ const wordCheck = isChecked("wordCheck");
+ //区分大小写匹配
+ const caseCheck = isChecked("caseCheck");
+
+ let regExpFlags = "g";
+ if (!caseCheck) {
+ searchText = searchText.toLowerCase();
+ regExpFlags += "i";
}
- //区分大小写匹配
- let caseCheck = false;
- if($("#luckysheet-search-replace #caseCheck input[type='checkbox']").is(":checked")){
- caseCheck = true;
+ const addResult = (r, c) => {
+ if(!((r + "_" + c) in obj)){
+ obj[r + "_" + c] = 0;
+ arr.push({"r": r, "c": c});
+ }
}
for(let s = 0; s < range.length; s++){
- let r1 = range[s].row[0], r2 = range[s].row[1];
- let c1 = range[s].column[0], c2 = range[s].column[1];
+ const r1 = range[s].row[0], r2 = range[s].row[1];
+ const c1 = range[s].column[0], c2 = range[s].column[1];
for(let r = r1; r <= r2; r++){
for(let c = c1; c <= c2; c++){
- let cell = Store.flowdata[r][c];
+ const cell = Store.flowdata[r][c];
if(cell != null){
let value = valueShowEs(r, c, Store.flowdata);
@@ -407,66 +412,22 @@ const luckysheetSearchReplace = {
}
if(value != null && value != ""){
+ let wasFound = false;
value = value.toString();
-
- // 1. 勾选整词 直接匹配
- // 2. 勾选了正则 结合是否勾选 构造正则
- // 3. 什么都没选 用字符串 indexOf 匹配
+ value = caseCheck ? value : value.toLowerCase();
if(wordCheck){ //整词
- if(caseCheck){
- if(searchText == value){
- if(!((r + "_" + c) in obj)){
- obj[r + "_" + c] = 0;
- arr.push({"r": r, "c": c});
- }
- }
- }
- else{
- let txt = searchText.toLowerCase();
- if(txt == value.toLowerCase()){
- if(!((r + "_" + c) in obj)){
- obj[r + "_" + c] = 0;
- arr.push({"r": r, "c": c});
- }
- }
- }
+ wasFound = searchText == value;
}
else if(regCheck){ //正则表达式
- let reg;
- // 是否区分大小写
- if(caseCheck){
- reg = new RegExp(func_methods.getRegExpStr(searchText), "g");
- }
- else{
- reg = new RegExp(func_methods.getRegExpStr(searchText), "ig");
- }
-
- if(reg.test(value)){
- if(!((r + "_" + c) in obj)){
- obj[r + "_" + c] = 0;
- arr.push({"r": r, "c": c});
- }
- }
+ let reg = new RegExp(func_methods.getRegExpStr(searchText), regExpFlags);
+ wasFound = reg.test(value);
}
- else{
- if(caseCheck){
- if(~value.indexOf(searchText)){
- if(!((r + "_" + c) in obj)){
- obj[r + "_" + c] = 0;
- arr.push({"r": r, "c": c});
- }
- }
- }
- else{
- if(~value.toLowerCase().indexOf(searchText.toLowerCase())){
- if(!((r + "_" + c) in obj)){
- obj[r + "_" + c] = 0;
- arr.push({"r": r, "c": c});
- }
- }
- }
+ else {
+ wasFound = ~value.indexOf(searchText);
}
+
+ wasFound && addResult(r, c);
}
}
}
@@ -773,4 +734,4 @@ const luckysheetSearchReplace = {
}
}
-export default luckysheetSearchReplace;
\ No newline at end of file
+export default luckysheetSearchReplace;