jquery - 突出显示 jQuery UI 自动完成

标签 jquery jquery-ui

我正在使用 jQuery UI 1.8.6 中的自动完成功能。我想强调匹配结果。但由于某种原因,当我使用正则表达式在匹配字符周围添加“强”标签时,字符串被转义。所以我看到了[strong]匹配的字符[/strong],而不是标记的文本。

这是我当前使用的 JavaScript:

$("#autocompleteinputfield").autocomplete({
    source: function (request, response) {
        $.ajax({
            url: "someservice",
            type: "GET",
            dataType: "json",
            data: { filter: request.term, maxResults: 10 },
            success: function (data) {
                response($.map(data, function (item) {
                    // return { label: item.ID + ' - ' + item.Name, id: item.ID, value: item.Name }
                    var regex = new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + request.term.replace(/ ([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/ gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi");

                    return {
                        label: (item.ID + ' - ' + item.Name).replace(regex, "<strong>$1</strong>"),
                        id: item.ID,
                        value: item.Name
                    }

                }))
            }
        });
    },
    select: function (event, ui) {
        alert(ui.item ? ("You picked '" + ui.item.label + "' with an ID of " + ui.item.id)
            : "Nothing selected, input was " + this.value);
    }
});

更新:

“Input”是在文本框中输入的文本(在本例中:[input type="text"id="autocompleteinputfield"/]

输出如下:

[{"Description":"Nothing meaningful","ID":3,"Name":"Joe Public‎"}]

最佳答案

jQuery 自动完成源代码是罪魁祸首。如果您查看实际的 javascript 文件,您会发现用于在自动完成列表中显示项目的定义:

_renderItem: function( ul, item) {
    return $( "<li></li>" )
        .data( "item.autocomplete", item )
        .append( $( "<a></a>" ).text( item.label ) )
        .appendTo( ul );
}

你会看到它附加了“.text(item.label)”,这导致 html 被转义。为了解决这个问题,您必须进行一些修改来覆盖此“_renderItem”方法,将以纯文本形式附加标签的行替换为以 html 形式附加标签的行。因此,请像这样更新您的代码:

$(function () {
    $("#autocompleteinputfield").autocomplete({
        // leave your code inside here exactly like it was
    })
    .data('autocomplete')._renderItem = function( ul, item ) {
        return $( "<li></li>" )
            .data( "item.autocomplete", item )
            .append( '<a>' + item.label + '</a>' )
            .appendTo( ul );
    };
});

更新:对于 jQuery 版本 >=1.10,有一些小修改:

$(function () {
    $("#autocompleteinputfield").autocomplete({
        // leave your code inside here exactly like it was
    })
    .data('ui-autocomplete')._renderItem = function( ul, item ) {
        return $( "<li></li>" )
            .data( "ui-autocomplete-item", item )
            .append( '<a>' + item.label + '</a>' )
            .appendTo( ul );
    };
});

关于jquery - 突出显示 jQuery UI 自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4107195/

相关文章:

带缩放功能的 JQuery 径向图

javascript - 使用 jQuery 检查页面加载时的所有复选框

java - 下载由 java web 服务 (POST) 流式传输的 pdf

javascript - Datepicker 弹出第一个焦点

javascript - 如何编写一个让 jQuery UI slider 自动滑动的脚本?

javascript - 可拖动的二叉树

jQuery UI 可排序在 iPAD 中不起作用

jquery - 带有图标的 jQM 选择菜单,向左移动标题

javascript - 在 jQuery UI Draggable 中延迟后启动拖动而无需移动鼠标?

jquery - 将点击更改为页面加载