浏览代码

Search highlight destroys content of action button columns #5534

sk 5 年之前
父节点
当前提交
f1d7fa4141
共有 1 个文件被更改,包括 15 次插入1 次删除
  1. 15 1
      src/bootstrap-table.js

+ 15 - 1
src/bootstrap-table.js

@@ -1575,7 +1575,21 @@ class BootstrapTable {
       }
       }
 
 
       if (this.searchText && this.options.searchHighlight) {
       if (this.searchText && this.options.searchHighlight) {
-        value = Utils.calculateObjectValue(column, column.searchHighlightFormatter, [value, this.searchText], value.toString().replace(new RegExp(`(${ this.searchText.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') })`, 'gim'), '<mark>$1</mark>'))
+        let defValue = ''
+        const regExp = new RegExp(`(${ this.searchText.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') })`, 'gim')
+        const marker = '<mark>$1</mark>'
+        const isHTML = !/<(?=.*? .*?\/ ?>|br|hr|input|!--|wbr)[a-z]+.*?>|<([a-z]+).*?<\/\1>/i.test(value.toString())
+
+        if (isHTML) {
+          // value can contains a HTML tags
+          const textContent = new DOMParser().parseFromString(value.toString(), 'text/html').documentElement.textContent
+
+          defValue = value.toString().replace(textContent, textContent.replace(regExp, marker))
+        } else {
+          // but usually not
+          defValue = value.toString().replace(regExp, marker)
+        }
+        value = Utils.calculateObjectValue(column, column.searchHighlightFormatter, [value, this.searchText], defValue)
       }
       }
 
 
       if (item[`_${field}_data`] && !Utils.isEmptyObject(item[`_${field}_data`])) {
       if (item[`_${field}_data`] && !Utils.isEmptyObject(item[`_${field}_data`])) {