Browse Source

fix: 修复三级页高亮问题

zhangyuhan 1 year ago
parent
commit
877d1df88c
2 changed files with 69 additions and 18 deletions
  1. 52 1
      src/web/staticres/js/common.js
  2. 17 17
      src/web/staticres/tags/js/no-login-detail.js

+ 52 - 1
src/web/staticres/js/common.js

@@ -74,7 +74,7 @@ function showToast (text, duration) {
 	if (!text) return
 	if (!text) return
   // 如果页面中已存在直接移除,在创建新的
   // 如果页面中已存在直接移除,在创建新的
   var t = $('#j-toast')
   var t = $('#j-toast')
-  if (t.length > 0) { 
+  if (t.length > 0) {
     // 存在
     // 存在
     t.remove()
     t.remove()
   }
   }
@@ -383,6 +383,57 @@ function keyWordHighlight (value, oldChars, newChar) {
 
 
   return value
   return value
 }
 }
+
+
+/**
+ * 富文本高亮专用替换,用于指定关键词包裹高亮,使用dom解析避免HTML标签被影响
+ * @param htmlString - String
+ * @param keyword - String
+ * @param richChar - String $1
+ */
+function replaceKeywordWithRichText (htmlString, keyword, richChar) {
+  if (!keyword || !richChar || keyword === '略') return htmlString
+
+  // 创建一个临时的DOM元素来解析HTML字符串
+  var tempDiv = document.createElement('div')
+  tempDiv.innerHTML = htmlString
+
+  // 格式化需要替换的富文本
+  var richString = richChar.replace(/\$1/g, keyword)
+
+  // 递归函数来遍历DOM节点并替换文本
+  function replaceText(node) {
+    if (node.nodeType === Node.TEXT_NODE && node.textContent.includes(keyword)) {
+      // 创建一个文档片段来存放替换后的富文本和剩余文本
+      var frag = document.createDocumentFragment()
+      // 将文本分割为关键词前后的文本,以及替换的富文本
+      var parts = node.textContent.split(keyword)
+      for (var i = 0; i < parts.length; i++) {
+        if (i === 1) {
+          // 关键词替换为富文本
+          var richTextNode = document.createElement('div')
+          richTextNode.innerHTML = richString;
+          frag.appendChild(richTextNode.firstChild);
+        } else {
+          // 其他文本正常添加
+          frag.appendChild(document.createTextNode(parts[i]))
+        }
+      }
+      // 替换原始文本节点
+      node.parentNode.replaceChild(frag, node)
+    } else if (node.nodeType === Node.ELEMENT_NODE) {
+      // 如果是元素节点,递归其子节点
+      Array.from(node.childNodes).forEach(replaceText)
+    }
+  }
+
+  // 从临时div开始递归替换文本
+  replaceText(tempDiv)
+
+  // 返回修改后的HTML字符串
+  return tempDiv.innerHTML
+
+}
 function getWxVersion(){
 function getWxVersion(){
 	var wechatInfo = navigator.userAgent.match(/MicroMessenger\/([\d\.]+)/i);
 	var wechatInfo = navigator.userAgent.match(/MicroMessenger\/([\d\.]+)/i);
 	if(!wechatInfo) {
 	if(!wechatInfo) {

+ 17 - 17
src/web/staticres/tags/js/no-login-detail.js

@@ -178,8 +178,8 @@ function clearup(rp){
     //
     //
   }
   }
   if(projectName){
   if(projectName){
-    dtcontent = keyWordHighlight(dtcontent,projectName,"<span class='keyword' style=\"border-bottom:1px solid #2cb7ca\">$1</span>");
-    dttitlecopy = keyWordHighlight(dttitlecopy,projectName,"<span class='keyword' id='hst'  style=\"border-bottom:1px solid #2cb7ca;cursor: pointer;\">$1</span>");
+    dtcontent = replaceKeywordWithRichText(dtcontent,projectName,"<span class='keyword' style=\"border-bottom:1px solid #2cb7ca\">$1</span>");
+    dttitlecopy = replaceKeywordWithRichText(dttitlecopy,projectName,"<span class='keyword' id='hst'  style=\"border-bottom:1px solid #2cb7ca;cursor: pointer;\">$1</span>");
 
 
   }
   }
   if(dataCode=="winner"&&rp=="P"){
   if(dataCode=="winner"&&rp=="P"){
@@ -191,7 +191,7 @@ function clearup(rp){
     for (var i=0;i<s_winner.split(",").length;i++){
     for (var i=0;i<s_winner.split(",").length;i++){
       var winner_con_i = s_winner.split(",")[i]
       var winner_con_i = s_winner.split(",")[i]
       if(winner_con_i != "" && content.toLowerCase().indexOf(winner_con_i.toLowerCase()) > -1){
       if(winner_con_i != "" && content.toLowerCase().indexOf(winner_con_i.toLowerCase()) > -1){
-        dtcontent = keyWordHighlight(content,winner_con_i,"<span class='keyword winner' data-val='winner__"+i+"'  style=\"border-bottom:1px solid #2cb7ca\">$1</span>");
+        dtcontent = replaceKeywordWithRichText(content,winner_con_i,"<span class='keyword winner' data-val='winner__"+i+"'  style=\"border-bottom:1px solid #2cb7ca\">$1</span>");
       }
       }
     }
     }
     //dtcontent = keyWordHighlight(dtcontent,s_winner,"<span class='keyword winner' style=\"border-bottom:1px solid #2cb7ca\">$1</span>");
     //dtcontent = keyWordHighlight(dtcontent,s_winner,"<span class='keyword winner' style=\"border-bottom:1px solid #2cb7ca\">$1</span>");
@@ -204,7 +204,7 @@ function clearup(rp){
   var wordsArray = getQueryString("kds").split(" ");
   var wordsArray = getQueryString("kds").split(" ");
   if(wordsArray){
   if(wordsArray){
     for(var i=0;i<wordsArray.length;i++){
     for(var i=0;i<wordsArray.length;i++){
-      dtcontent = keyWordHighlight(dtcontent,wordsArray[i],"<span class='jykeyword'>$1</span>");
+      dtcontent = replaceKeywordWithRichText(dtcontent,wordsArray[i],"<span class='jykeyword'>$1</span>");
     }
     }
   }
   }
   if(s_winner){
   if(s_winner){
@@ -924,11 +924,11 @@ $(function(){
     //if(projectname != "" && content.toLowerCase().indexOf(projectname.toLowerCase()) > -1){
     //if(projectname != "" && content.toLowerCase().indexOf(projectname.toLowerCase()) > -1){
     //	content = keyWordHighlight(content,projectname,"<span class='keyword myfollow' style=\"border-bottom:1px solid #2cb7ca\">$1</span>");
     //	content = keyWordHighlight(content,projectname,"<span class='keyword myfollow' style=\"border-bottom:1px solid #2cb7ca\">$1</span>");
     //}
     //}
-    content = keyWordHighlight(content,projectName,"<span class='keyword' style=\"border-bottom:1px solid #2cb7ca\">$1</span>");
+    content = replaceKeywordWithRichText(content,projectName,"<span class='keyword' style=\"border-bottom:1px solid #2cb7ca\">$1</span>");
     //if(projectname != "" && titleCopy.toLowerCase().indexOf(projectname.toLowerCase()) > -1){
     //if(projectname != "" && titleCopy.toLowerCase().indexOf(projectname.toLowerCase()) > -1){
     //	titleCopy = keyWordHighlight(titleCopy,projectname,"<span class='keyword' style=\"border-bottom:1px solid #2cb7ca\">$1</span>");
     //	titleCopy = keyWordHighlight(titleCopy,projectname,"<span class='keyword' style=\"border-bottom:1px solid #2cb7ca\">$1</span>");
     //}
     //}
-    titleCopy = keyWordHighlight(titleCopy,projectName,"<span class='keyword' id='hst'  style=\"border-bottom:1px solid #2cb7ca;cursor: pointer;\">$1</span>");
+    titleCopy = replaceKeywordWithRichText(titleCopy,projectName,"<span class='keyword' id='hst'  style=\"border-bottom:1px solid #2cb7ca;cursor: pointer;\">$1</span>");
   }else{
   }else{
     // $(".com-guanzhu .scanqr>span:last").html("随时掌握招标信息");
     // $(".com-guanzhu .scanqr>span:last").html("随时掌握招标信息");
     // $(".com-guanzhu>.scanqr>img").height(135);
     // $(".com-guanzhu>.scanqr>img").height(135);
@@ -939,7 +939,7 @@ $(function(){
     for (var i=0;i<s_winner.split(",").length;i++){
     for (var i=0;i<s_winner.split(",").length;i++){
       var winner_con_i = s_winner.split(",")[i]
       var winner_con_i = s_winner.split(",")[i]
       if(winner_con_i != "" && content.toLowerCase().indexOf(winner_con_i.toLowerCase()) > -1){
       if(winner_con_i != "" && content.toLowerCase().indexOf(winner_con_i.toLowerCase()) > -1){
-        content = keyWordHighlight(content,winner_con_i,"<span class='keyword winner' data-val='winner__"+i+"' style=\"border-bottom:1px solid #2cb7ca\">$1</span>");
+        content = replaceKeywordWithRichText(content,winner_con_i,"<span class='keyword winner' data-val='winner__"+i+"' style=\"border-bottom:1px solid #2cb7ca\">$1</span>");
       }
       }
     }
     }
   }
   }
@@ -954,18 +954,18 @@ $(function(){
         if (isNumber.test(wordsArray[i])){
         if (isNumber.test(wordsArray[i])){
           continue
           continue
         }
         }
-        content = keyWordHighlight(content,wordsArray[i],"<span class='jykeyword'>$1</span>");
-        titleCopy = keyWordHighlight(titleCopy,wordsArray[i],"<span class='jykeyword'>$1</span>");
+        content = replaceKeywordWithRichText(content,wordsArray[i],"<span class='jykeyword'>$1</span>");
+        titleCopy = replaceKeywordWithRichText(titleCopy,wordsArray[i],"<span class='jykeyword'>$1</span>");
         //项目基本信息 关键词高亮
         //项目基本信息 关键词高亮
         $(".preb-cont").each(function(){
         $(".preb-cont").each(function(){
           var prebCont = $(this).html();
           var prebCont = $(this).html();
-          prebCont = keyWordHighlight(prebCont,wordsArray[i],"<span class='jykeyword' style=\"border-bottom:1px solid #2cb7ca\">$1</span>");
+          prebCont = replaceKeywordWithRichText(prebCont,wordsArray[i],"<span class='jykeyword' style=\"border-bottom:1px solid #2cb7ca\">$1</span>");
           $(this).html(prebCont);
           $(this).html(prebCont);
         })
         })
         //审批事项公示信息高亮
         //审批事项公示信息高亮
         $(".preb-examcont").each(function(){
         $(".preb-examcont").each(function(){
           var prebExamcont = $(this).text();
           var prebExamcont = $(this).text();
-          prebExamcont = keyWordHighlight(prebExamcont,wordsArray[i],"<span class='jykeyword' style=\"border-bottom:1px solid #2cb7ca\">$1</span>");
+          prebExamcont = replaceKeywordWithRichText(prebExamcont,wordsArray[i],"<span class='jykeyword' style=\"border-bottom:1px solid #2cb7ca\">$1</span>");
           $(this).html(prebExamcont);
           $(this).html(prebExamcont);
         })
         })
       }
       }
@@ -1218,7 +1218,7 @@ var thishtlists_ent = function(){
               amountHtml = '<span class="priceStyle">'+amount+'万元中标</span>';
               amountHtml = '<span class="priceStyle">'+amount+'万元中标</span>';
             }
             }
             if(title){
             if(title){
-              title = keyWordHighlight(title,projectname,"<span  style='color:#2cb7ca;'>$1</span>");
+              title = replaceKeywordWithRichText(title,projectname,"<span  style='color:#2cb7ca;'>$1</span>");
             }else{
             }else{
               title = "";
               title = "";
             }
             }
@@ -1265,7 +1265,7 @@ var thishtlists_ent = function(){
       }
       }
       if(titleCopyDec!=""){
       if(titleCopyDec!=""){
         var listtitle = titleCopyDec;
         var listtitle = titleCopyDec;
-        listtitle = keyWordHighlight(listtitle,projectname,"<span  style='color:#2cb7ca;'>$1</span>");
+        listtitle = replaceKeywordWithRichText(listtitle,projectname,"<span  style='color:#2cb7ca;'>$1</span>");
         hthtml += listtitle;
         hthtml += listtitle;
       }
       }
       hthtml +='</a>';
       hthtml +='</a>';
@@ -1342,7 +1342,7 @@ var thishtlists = function(){
 	          }
 	          }
 	          if(listone["s_title"]!=""){
 	          if(listone["s_title"]!=""){
 	            var listtitle = listone["s_title"];
 	            var listtitle = listone["s_title"];
-	            listtitle = keyWordHighlight(listtitle,projectname,"<span style='color:#2cb7ca;'>$1</span>");
+	            listtitle = replaceKeywordWithRichText(listtitle,projectname,"<span style='color:#2cb7ca;'>$1</span>");
 	            hthtml += listtitle
 	            hthtml += listtitle
 	          }
 	          }
 	          hthtml +='</a></div></div>'
 	          hthtml +='</a></div></div>'
@@ -1379,7 +1379,7 @@ var thishtlists = function(){
 	          }
 	          }
 	          if(listone["s_title"]!=""){
 	          if(listone["s_title"]!=""){
 	            var listtitle = listone["s_title"];
 	            var listtitle = listone["s_title"];
-	            listtitle = keyWordHighlight(listtitle,projectname,"<span style='color:#2cb7ca;'>$1</span>");
+	            listtitle = replaceKeywordWithRichText(listtitle,projectname,"<span style='color:#2cb7ca;'>$1</span>");
 	            hthtml += listtitle
 	            hthtml += listtitle
 	          }
 	          }
 	          hthtml +='</a></div></div>'
 	          hthtml +='</a></div></div>'
@@ -1403,7 +1403,7 @@ var thishtlists = function(){
 	        }
 	        }
 	        if(titleCopyDec!=""){
 	        if(titleCopyDec!=""){
 	          var listtitle = titleCopyDec;
 	          var listtitle = titleCopyDec;
-	          listtitle = keyWordHighlight(listtitle,projectname,"<span  style='color:#2cb7ca;'>$1</span>");
+	          listtitle = replaceKeywordWithRichText(listtitle,projectname,"<span  style='color:#2cb7ca;'>$1</span>");
 	          hthtml += listtitle
 	          hthtml += listtitle
 	        }
 	        }
 	        hthtml +='</a></div></div>'
 	        hthtml +='</a></div></div>'
@@ -1428,7 +1428,7 @@ var thishtlists = function(){
 	      }
 	      }
 	      if(titleCopyDec!=""){
 	      if(titleCopyDec!=""){
 	        var listtitle = titleCopyDec;
 	        var listtitle = titleCopyDec;
-	        listtitle = keyWordHighlight(listtitle,projectname,"<span  style='color:#2cb7ca;'>$1</span>");
+	        listtitle = replaceKeywordWithRichText(listtitle,projectname,"<span  style='color:#2cb7ca;'>$1</span>");
 	        hthtml += listtitle
 	        hthtml += listtitle
 	      }
 	      }
 	      hthtml +='</a></div></div>'
 	      hthtml +='</a></div></div>'