クラシックなフロントエンド JS: キーワードを強調表示するリッチ テキスト

まえがき: 2 つの実装方法

構築方法: 最も単純でそのまま使用できますが、ハイライト スタイルをカスタマイズする場合は、再定義して同じページに一度記述する必要があります。

クラスの構築: 呼び出しは少し複雑ですが、インスタンス化されると、定義を繰り返すことなく、カスタマイズされたスタイルをインスタンス オブジェクトに保存できます。

1. 施工方法

// 默认样式
const defaultOption = {
  fontSize: 20,
  fontColor: "red",
  fontWeight: 800,
};

/**
 * 富文本关键字高亮
 * @param {string} str - 富文本字符串
 * @param {string[] | string} high - 高亮词组 | 高亮词
 * @param {object} options - 高亮样式配置
 * @param {number} options.fontSize - 高亮字体大小
 * @param {string} options.fontColor - 高亮字体颜色
 * @param {number} options.fontWeight - 高亮字体粗细
 * @param {object} options.style - css 行内样式放入方式,替换默认高亮样式
 *
 * @return {string} - 返回处理后的富文本
 *
 * @example
 * richTextHigh("我是你爸爸", "爸爸")
 * =>
 * "我是你<span style="font-size: 20px; color: red; font-weight: 800;margin: 0 5px;">爸爸</span>"
 */
function richTextHigh(str, high, options = defaultOption) {
  // 高亮样式
  const { fontSize, fontColor, fontWeight, style } = options;
  const _style =
    style !== undefined
      ? style
      : `font-size: ${fontSize || 20}px; color: ${
          fontColor || "red"
        }; font-weight: ${fontWeight || 800}`;
  // 高亮文字
  const _high = typeof high == "string" ? high : high.join("|");
  // 高亮正则
  const reg = new RegExp(_high, "gi");

  const _str = str.replace(reg, (key) => {
    return `<span style="${_style};margin: 0 5px;">${key}</span>`;
  });
  return _str;
}

2. クラスを構築する

// 定义富文本类
class RichText {
  defaultOption = {
    fontSize: 20,
    fontColor: "red",
    fontWeight: 800,
  };

  options;

  constructor(options = this.defaultOption) {
    this.options = options;
  }

  richTextHigh(str, high) {
    const { fontSize, fontColor, fontWeight, style } = this.options;
    const _style =
      style !== undefined
        ? style
        : `font-size: ${fontSize || 20}px; color: ${
            fontColor || "red"
          }; font-weight: ${fontWeight || 800}`;
    // 高亮文字
    const _high = typeof high == "string" ? high : high.join("|");
    // 高亮正则
    const reg = new RegExp(_high, "gi");

    const _str = str.replace(reg, (key) => {
      return `<span style="${_style};margin: 0 5px;">${key}</span>`;
    });
    return _str;
  }
}

// 实例化, 默认样式
let richText1 = new RichText();
richText1.richTextHigh("我是你爸爸", "爸爸"); // "我是你<span style="font-size: 20px; color: red; font-weight: 800;margin: 0 5px;">爸爸</span>"

// 实例化,自定义样式
let richText2 = new RichText({ style: "font-size: 20px; color: green;" })
richText2.richTextHigh("我是你爸爸", "爸爸"); // "我是你<span style="font-size: 20px; color: green;;margin: 0 5px;">爸爸</span>"

おすすめ

転載: blog.csdn.net/weixin_64684095/article/details/133135181