Jquery自动完成组合框\类别 - 搜索optgroup标签

时间:2012-06-21 19:52:59

标签: jquery jquery-ui jquery-ui-autocomplete

根据我之前提出的问题建立here

我正在使用jquery ui自动完成功能来创建自动填充表单。在您的帮助下,我成功地将组合框和类别选项组合在一起。现在我想我想把它拿到另一个层次。

我想做的是能够让组合框也搜索optgroup标签以及选项文本。如果文本与optgroup标签匹配,则整个类别都会显示,但它仍然会搜索选项文本。

我猜测编辑需要在下面的块中进行。

 response(select.find("option").map(function() {
                    var text = $(this).text();
                    if (this.value && (!request.term || matcher.test(text))) return {
                        label: text.replace(
                        new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + $.ui.autocomplete.escapeRegex(request.term) + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>"),
                        value: text,
                        option: this,
                        category: $(this).closest("optgroup").attr("label")
                    };              
                }).get());

jsfiddle

1 个答案:

答案 0 :(得分:0)

您发现了正确的代码部分。这是一个修改后的版本,也可以查看类别:

response(select.find("option").map(function() {
    var text = $(this).text(),
        category = $(this).closest("optgroup").attr("label");
    if(this.value && (!request.term || matcher.test(text) || matcher.test(category))) return {
        label: text.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + $.ui.autocomplete.escapeRegex(request.term) + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>"),
        value: text,
        option: this,
        category: category.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + $.ui.autocomplete.escapeRegex(request.term) + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>")
    };
}).get());
  • 除了与选项文字(matcher.test(text))匹配外,我还尝试与选项组标签匹配:matcher.test(category)
  • 我还添加了一个正则表达式替换,以强调类别中匹配的文本。

(我无法在my update of your jsfiddle example中进行最后一次修改,但它对我正在进行的项目非常有用)