Merge pull request 'Bug579-LuKangyang' (#172) from Bug579-LuKangyang into Alpha-snapshot20240618
Reviewed-on: #172Bug540-XiongJiaming
						commit
						47a359c798
					
				|  | @ -15,6 +15,42 @@ function showBtnHandler() { | ||||||
|     document.getElementById("text-content").addEventListener("touchstart", fillInWord, false); |     document.getElementById("text-content").addEventListener("touchstart", fillInWord, false); | ||||||
|     highLight(); |     highLight(); | ||||||
| } | } | ||||||
|  | function replaceWords(str, word) { | ||||||
|  |   let count = 0; | ||||||
|  | 
 | ||||||
|  |   const regex = new RegExp(`(^|\\s)${word}(?=\\s|$)`, 'g'); | ||||||
|  | 
 | ||||||
|  |   let result = str.replace(regex, (match, p1) => { | ||||||
|  |     count++; | ||||||
|  |     // p1 保留前导空格(如果有),仅第一个匹配保留,后续匹配替换为空字符串
 | ||||||
|  |     return count === 1 ? match : p1; | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  |   return result; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function countWords(str, word) { | ||||||
|  |   // 使用正则表达式匹配目标单词的整个单词边界情况,包括前后空格、行首和行尾
 | ||||||
|  |   const regex = new RegExp(`(^|\\s)${word}(?=\\s|$)`, 'g'); | ||||||
|  |   let match; | ||||||
|  |   let count = 0; | ||||||
|  | 
 | ||||||
|  |   // 迭代匹配所有符合条件的单词
 | ||||||
|  |   while ((match = regex.exec(str)) !== null) { | ||||||
|  |     count++; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   return count; | ||||||
|  | } | ||||||
|  | //用于替换单词
 | ||||||
|  | function replaceAllWords(str, word, replacement) { | ||||||
|  |   const regex = new RegExp(`(^|\\s)${word}(?=\\s|$)`, 'gi'); | ||||||
|  |   let result = str.replace(regex, (match, p1) => { | ||||||
|  |     return p1 + replacement; | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  |   return result; | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| function getWord() { | function getWord() { | ||||||
|     return window.getSelection ? window.getSelection().toString() : document.selection.createRange().text; |     return window.getSelection ? window.getSelection().toString() : document.selection.createRange().text; | ||||||
|  | @ -32,8 +68,22 @@ function highLight() { | ||||||
|     const list = allWords.split(" "); // 将所有的生词放入一个list中
 |     const list = allWords.split(" "); // 将所有的生词放入一个list中
 | ||||||
|     if(word !== null && word !== "" && word !== " "){ |     if(word !== null && word !== "" && word !== " "){ | ||||||
|         if(localStorage.getItem("nowWords").indexOf(word) !== -1 || localStorage.getItem("nowWords").indexOf(word.toLowerCase()) !== -1){ |         if(localStorage.getItem("nowWords").indexOf(word) !== -1 || localStorage.getItem("nowWords").indexOf(word.toLowerCase()) !== -1){ | ||||||
|             articleContent = articleContent.replace(new RegExp('<span class="highlighted">' + word + '</span>', "gi"), word); |             articleContent = articleContent.replace(new RegExp('<span class="highlighted">' + word + '</span>', "g"), word); | ||||||
|             pickedWords.value = localStorage.getItem("nowWords").replace(word,""); | 
 | ||||||
|  |     let count=countWords(pickedWords.value,word) | ||||||
|  |     let currentWords=localStorage.getItem("nowWords")+" "+word | ||||||
|  |     localStorage.setItem("nowWords",currentWords) | ||||||
|  | //
 | ||||||
|  |     if(count>0){ | ||||||
|  |         if(count==1){ | ||||||
|  |             localStorage.setItem("nowWords",replaceWords(currentWords,word)) | ||||||
|  |         }else{ | ||||||
|  |             localStorage.setItem("nowWords",replaceAllWords(currentWords,word,"")) | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     pickedWords.value = localStorage.getItem("nowWords") | ||||||
|             document.getElementById("article").innerHTML = articleContent; |             document.getElementById("article").innerHTML = articleContent; | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue