jQuery自动完成插件-自定义突出显示功能

标签 jquery regex autocomplete

每个项目的自动完成结果如下所示:

<h3>Celebrity Sweepstakes</h3><p>0 episodes</p>

但我只想突出显示 H3 内的标题。请参阅下面的“突出显示”功能。我不知道如何更改原始 RegExp 以仅替换标题内。

$(".show_autocomplete").autocomplete("/shows.js", {
        minChars: 2,
        max: 100,
  formatItem:function(item, index, total, query){
    return "<h3>" + item.title + "</h3><p>" + item.episodes + " episodes</p>"
  },
  formatMatch:function(item){
    return item.title;
  },
  formatResult:function(item){
    return item.title;
  },
  dataType:'json',
  parse:function(data) {
    return $.map(data, function(item) {
      return {
        data: item,
        value: item.title,
        result: item.title
      }
    });
  },
  highlight: function(value, term) {
    var title = value.split("</h3>")[0].replace("<h3>", ""); //only replace inside this?
    return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>"); //original regexp
  }
}); 

最佳答案

最好通过进一步分解来解决这个问题。除了它不仅仅应用于 <h3> 的事实之外-内容,当前的实现是否按预期工作?

如果是这样,那么您可以将功能稍微分开,而不是使正则表达式变得更复杂。添加代码来识别和提取标题/<h3> -content,然后使用您当前拥有的代码对其进行突出显示。然后获取结果并将它们与原始输入的其余部分组合起来,瞧,<h3> -仅突出显示。

第二个好处是,这种方法可能比复杂的正则表达式更清楚地表达您的意图,有助于将来的维护(如果需要其他调整)。

关于jQuery自动完成插件-自定义突出显示功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3381859/

相关文章:

jquery - 将过渡淡入淡出应用到 css jQuery 中的粘性导航

javascript 代码执行和 ajax 异步

javascript - 正则表达式电话号码实时格式化

c# - 正则表达式获取花括号之间的字符串

c# - 匹配以特定字符开头的字符串

javascript - Jquery 自动完成中的附加参数

javascript - 如何每 10 分钟从 HTML 执行一次外部 JS?

javascript - chop 文本并在鼠标悬停时显示

python - Geany 自动完成 Python 约束

reactjs - 尝试导入错误 : 'unstable_useId' is not exported from '@material-ui/core/utils' (imported as 'useId' )