【问题标题】:jQuery UI autocomplete: add a css class to specific itemsjQuery UI 自动完成:向特定项目添加 CSS 类
【发布时间】:2011-02-19 17:32:41
【问题描述】:

我正在使用 Jquery UI 的自动完成小部件,并且我正在通过参考中描述的回调获取要显示的项目。

我有一个用例,我需要呈现从服务器检索到的一些项目,与其他项目略有不同,以便用户了解这些项目之间存在差异。就我而言,有些项目是“个人的”,有些是“全球的”。

我想通过向它们添加一个 CSS 类来让“个人”项目脱颖而出,以便它们具有稍微不同的背景。

这可能吗?我在参考文档中看到存在一个允许我将任意 HTML 放入“项目”的插件,但是当我真正需要做的只是添加一个类(在某些情况下)时,我觉得这是次优的。

我想我最终会得到这样的结果:

$("#myElement").autocomplete({
            //define callback to format results
            source: function(req, add){
                //pass request to server
                var baseUrl = '/getItems.php'
                $.getJSON(baseUrl, req, function(data) {

                    //create array for response objects
                    var suggestions = [];

                    //process response
                    $.each(data, function(i, val){
                        var entry = new Object();
                        if (val.personal == true){
                        // add some css class somehow?
                        }
                        entry.id = val.id;
                        suggestions.push(entry);
                    });

                    //pass array to callback
                    add(suggestions);
                });
            },

        });

【问题讨论】:

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


    【解决方案1】:

    从custom data and display 示例来看,您需要利用_renderItem 方法来自动完成:

    $("input").autocomplete({ ...  }).data("autocomplete")
        ._renderItem = function(ul, item) {
            var listItem = $("<li></li>")
                .data("item.autocomplete", item)
                .append("<a>" + item.label + "</a>")
                .appendTo(ul);
    
            if (item.personal) {
                listItem.addClass("personal");
            }
    
            return listItem;
        };
    

    每次渲染项目时都会调用此方法,从而可以对项目进行检查并有条件地应用一个类(或执行更复杂的操作)。

    这是一个工作示例(没有 AJAX,但概念相同):http://jsfiddle.net/andrewwhitaker/rMhVz/2/

    【讨论】:

    【解决方案2】:

    如果您使用的是 JQuery UI 1.10 及更高版本,则需要将代码更改为以下内容:即“.data("ui-autocomplete")"

    $("input").autocomplete({ ...  }).data("ui-autocomplete")
    ._renderItem = function(ul, item) {
        var listItem = $("<li></li>")
            .data("item.autocomplete", item)
            .append("<a>" + item.label + "</a>")
            .appendTo(ul);
    
        if (item.personal) {
            listItem.addClass("personal");
        }
    
        return listItem;
    };
    

    【讨论】:

      猜你喜欢
      • 2011-08-08
      • 2017-03-08
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      • 2023-03-13
      • 1970-01-01
      相关资源
      最近更新 更多