diff --git a/src/core/platform/web/jquery/__test__/fn.test.js b/src/core/platform/web/jquery/__test__/fn.test.js
new file mode 100644
index 000000000..6c23271fd
--- /dev/null
+++ b/src/core/platform/web/jquery/__test__/fn.test.js
@@ -0,0 +1,64 @@
+/**
+ * @author windy
+ * @version 2.0
+ * Created by windy on 2019/12/6
+ */
+
+describe("标红test", function () {
+
+ /**
+ * test_author_windy
+ */
+ it("无多音字标红", function () {
+ var a = BI.Test.createWidget({
+ type: "bi.layout",
+ });
+ a.element.__textKeywordMarked__("无多音字", "w");
+ expect(a.element.html()).to.equal("无多音字");
+ a.destroy();
+ });
+
+ /**
+ * test_author_windy
+ */
+ it("含有多音字标红", function () {
+ var a = BI.Test.createWidget({
+ type: "bi.layout",
+ });
+ a.element.__textKeywordMarked__("长期协议", "z");
+ expect(a.element.html()).to.equal("长期协议");
+ a.element.__textKeywordMarked__("长期协议", "c");
+ expect(a.element.html()).to.equal("长期协议");
+ a.destroy();
+ });
+
+ /**
+ * test_author_windy
+ */
+ it("多音字错位标红", function () {
+ var a = BI.Test.createWidget({
+ type: "bi.layout",
+ });
+ a.element.__textKeywordMarked__("呵呵呵", "h");
+ expect(a.element.html()).to.equal("呵呵呵");
+ a.element.__textKeywordMarked__("呵呵呵", "hh");
+ expect(a.element.html()).to.equal("呵呵呵");
+ a.element.__textKeywordMarked__("呵呵呵", "hhh");
+ expect(a.element.html()).to.equal("呵呵呵");
+ a.destroy();
+ });
+
+ /**
+ * test_author_windy
+ */
+ it("原文和拼音都匹配标红", function () {
+ var a = BI.Test.createWidget({
+ type: "bi.layout",
+ });
+ a.element.__textKeywordMarked__("啊a", "a");
+ expect(a.element.html()).to.equal("啊a");
+ a.element.__textKeywordMarked__("a啊", "a");
+ expect(a.element.html()).to.equal("a啊");
+ a.destroy();
+ });
+});
\ No newline at end of file
diff --git a/src/core/platform/web/jquery/fn.js b/src/core/platform/web/jquery/fn.js
index 9d94719c6..4798e90af 100644
--- a/src/core/platform/web/jquery/fn.js
+++ b/src/core/platform/web/jquery/fn.js
@@ -98,7 +98,8 @@ if (BI.jQuery) {
}
}
- if (tidx >= 0) {
+ // BI-56945 场景: 对'啊a'标红, a为keyword, 此时tidx为1, pidx为0, 此时使用tidx显然'啊'就无法标红了
+ if (tidx >= 0 && pidx > tidx) {
// 标红的text未encode
this.append(BI.htmlEncode(textLeft.substr(0, tidx)));
this.append(BI.$("").addClass("bi-keyword-red-mark")