diff --git a/app/static/js/fillword.js b/app/static/js/fillword.js
index 317373c..b3a8b42 100644
--- a/app/static/js/fillword.js
+++ b/app/static/js/fillword.js
@@ -30,6 +30,7 @@ function onChooseClick() {
     isChoose = !isChoose;
 }
 
-if (performance.navigation.type == 1) {        //如果网页刷新,停止播放声音
+// 如果网页刷新,停止播放声音
+if (performance.getEntriesByType("navigation")[0].type == "reload") {
     Reader.stopRead();
 }
\ No newline at end of file
diff --git a/app/static/js/highlight.js b/app/static/js/highlight.js
index 927f698..76b4793 100644
--- a/app/static/js/highlight.js
+++ b/app/static/js/highlight.js
@@ -22,48 +22,38 @@ function getWord() {
 
 function highLight() {
     if (!isHighlight) return;
-    let articleContent = document.getElementById("article").innerText;
+    let articleContent = document.getElementById("article").innerHTML; // innerHTML保留HTML标签来保持部分格式,且适配不同的浏览器
     let pickedWords = document.getElementById("selected-words");  // words picked to the text area
     let dictionaryWords = document.getElementById("selected-words2"); // words appearing in the user's new words list
     let allWords = dictionaryWords === null ? pickedWords.value + " " : pickedWords.value + " " + dictionaryWords.value;
-    const list = allWords.split(" "); // 将所有的生词放入一个list中,用于后续处理
+    const list = allWords.split(" "); // 将所有的生词放入一个list中
+    let totalSet = new Set();
     for (let i = 0; i < list.length; ++i) {
         list[i] = list[i].replace(/(^\W*)|(\W*$)/g, ""); // 消除单词两边的非单词字符
-        if (list[i] != "" && "<mark>".indexOf(list[i]) === -1 && "</mark>".indexOf(list[i]) === -1) {
+        if (list[i] != "" && !totalSet.has(list[i])) {
             // 返回所有匹配单词的集合, 正则表达式RegExp()中, "\b"匹配一个单词的边界, g 表示全局匹配, i 表示对大小写不敏感。
             let matches = new Set(articleContent.match(new RegExp("\\b" + list[i] + "\\b", "gi")));
-            for (let word of matches) {
-                // 将文章中所有出现该单词word的地方改为:"<mark>" + word + "<mark>"。 
-                articleContent = articleContent.replace(new RegExp("\\b" + word + "\\b", "g"), "<mark>" + word + "</mark>");
+            if (matches.has("mark")) {
+                // 优先处理单词为 "mark" 的情况
+                totalSet = new Set(["mark", ...totalSet]);
             }
+            totalSet = new Set([...totalSet, ...matches]);
         }
+    } 
+    // 删除所有的mark标签,防止标签发生嵌套
+    articleContent = articleContent.replace(/<(mark)[^>]*>/gi, "");
+    articleContent = articleContent.replace(/<(\/mark)[^>]*>/gi, "");
+    // 将文章中所有出现该单词word的地方改为:"<mark>" + word + "<mark>"。
+    for (let word of totalSet) {
+        articleContent = articleContent.replace(new RegExp("\\b" + word + "\\b", "g"), "<mark>" + word + "</mark>");
     }
     document.getElementById("article").innerHTML = articleContent;
 }
 
 function cancelHighlighting() {
-    let articleContent = document.getElementById("article").innerText;//将原来的.innerText改为.innerHtml,原因同上
-    let pickedWords = document.getElementById("selected-words");
-    const dictionaryWords = document.getElementById("selected-words2");    
-    const list = pickedWords.value.split(" ");    
-    if (pickedWords != null) {
-        for (let i = 0; i < list.length; ++i) {
-            list[i] = list[i].replace(/(^\s*)|(\s*$)/g, "");
-            if (list[i] !== "") { //原来判断的代码中,替换的内容为“list[i]”这个字符串,这明显是错误的,我们需要替换的是list[i]里的内容
-                articleContent = articleContent.replace(new RegExp("<mark>"+list[i]+"</mark>", "g"), list[i]);
-            }
-        }
-    }
-    if (dictionaryWords != null) {
-        let list2 = pickedWords.value.split(" ");
-        for (let i = 0; i < list2.length; ++i) {
-            list2 = dictionaryWords.value.split(" ");
-            list2[i] = list2[i].replace(/(^\s*)|(\s*$)/g, "");
-            if (list2[i] !== "") { //原来代码中,替换的内容为“list[i]”这个字符串,这明显是错误的,我们需要替换的是list[i]里的内容
-                articleContent = articleContent.replace(new RegExp("<mark>"+list2[i]+"</mark>", "g"), list2[i]);
-            }
-        }
-    }
+    let articleContent = document.getElementById("article").innerHTML;
+    articleContent = articleContent.replace(/<(mark)[^>]*>/gi, "");
+    articleContent = articleContent.replace(/<(\/mark)[^>]*>/gi, "");
     document.getElementById("article").innerHTML = articleContent;
 }
 
@@ -85,4 +75,4 @@ function toggleHighlighting() {
     }
 }
 
-showBtnHandler();
+showBtnHandler();
\ No newline at end of file
diff --git a/app/static/js/read.js b/app/static/js/read.js
index 814f627..c28fd26 100644
--- a/app/static/js/read.js
+++ b/app/static/js/read.js
@@ -9,7 +9,7 @@ var Reader = (function() {
         msg.rate = rate;
         msg.lang = "en-US";
         msg.onboundary = ev => {
-            if (ev.name == "word") {
+            if (ev.name === "word") {
                 current_position = ev.charIndex;
             }
         }
@@ -32,4 +32,4 @@ var Reader = (function() {
         read: read,
         stopRead: stopRead
     };
-})();
+}) ();
diff --git a/app/static/js/word_operation.js b/app/static/js/word_operation.js
index f043cce..dcf38ff 100644
--- a/app/static/js/word_operation.js
+++ b/app/static/js/word_operation.js
@@ -5,15 +5,14 @@ function familiar(theWord) {
     $.ajax({
         type:"GET",
         url:"/" + username + "/" + word + "/familiar",
-        success:function(response){
+        success:function(response) {
             let new_freq = freq - 1;
             const allow_move = document.getElementById("move_dynamiclly").checked;
             if (allow_move) {
-
                 if (new_freq <= 0) {
                     removeWord(theWord);
                 } else {
-                    renderWord({ word: theWord, freq: new_freq });
+                    renderWord({word: theWord, freq: new_freq});
                 }
             } else {
                 if(new_freq <1) {
@@ -33,11 +32,11 @@ function unfamiliar(theWord) {
     $.ajax({
         type:"GET",
         url:"/" + username + "/" + word + "/unfamiliar",
-        success:function(response){
+        success:function(response) {
             let new_freq = parseInt(freq) + 1;
             const allow_move = document.getElementById("move_dynamiclly").checked;
             if (allow_move) {
-                renderWord({ word: theWord, freq: new_freq });
+                renderWord({word: theWord, freq: new_freq});
             } else {
                 $("#freq_" + theWord).text(new_freq);
             }
@@ -51,7 +50,7 @@ function delete_word(theWord) {
     $.ajax({
         type:"GET",
         url:"/" + username + "/" + word + "/del",
-        success:function(response){
+        success:function(response) {
             const allow_move = document.getElementById("move_dynamiclly").checked;
             if (allow_move) {
                 removeWord(theWord);
@@ -114,7 +113,7 @@ function removeWord(word) {
     // 根据词频信息删除元素
     word = word.replace('&amp;', '&');
     const element_to_remove = document.getElementById(`p_${word}`);
-    if (element_to_remove != null) {
+    if (element_to_remove !== null) {
         element_to_remove.remove();
     }
 }
@@ -129,7 +128,7 @@ function renderWord(word) {
     for (const current of container.children) {
         const cur_word = parseWord(current);
         // 找到第一个词频比它小的元素,插入到这个元素前面
-        if (compareWord(cur_word, word) == -1) {
+        if (compareWord(cur_word, word) === -1) {
             container.insertBefore(new_element, current);
             inserted = true;
             break;
@@ -165,17 +164,11 @@ function elementFromString(string) {
  *  当first大于second时返回1
  */
 function compareWord(first, second) {
-    if (first.freq < second.freq) {
-        return -1;
+    if (first.freq !== second.freq) {
+        return first.freq < second.freq ? -1 : 1;
     }
-    if (first.freq > second.freq) {
-        return 1;
-    }
-    if (first.word < second.word) {
-        return -1;
-    }
-    if (first.word > second.word) {
-        return 1;
+    if (first.word !== second.word) {
+        return first.word < second.word ? -1 : 1;
     }
     return 0;
-}
+}
\ No newline at end of file