JQuery UI 自动完成:如何在插入输入字段之前从标签中剥离标签?

发布于 2024-11-18 04:20:57 字数 1389 浏览 0 评论 0原文

我正在使用 JQuery UI 自动完成,我有一组通过 ajax 返回的项目,其中的术语由搜索引擎突出显示(因此标签已经包含 html)。问题是,每次我选择一个项目时,带有 html 标签的值都会插入到文本框中,这当然不好。我想知道是否可以在插入文本框之前从标签上删除所有标签

        var cache = {}, lastXhr;
        $('#location_name').autocomplete({
        source: function( request, response ) {                 

            var q = request.term;
            if ( q in cache ) {
                response( cache[ q ] );
                return;
            }

            lastXhr = $.getJSON( "location_search/", {q: q}, function( data, status, xhr ) {
                $.each(data, function(i, v){
                    data[i].label = v.name + (v.address !== null ? ', ' + v.address : '');
                });

                cache[ q ] = data;

                if ( xhr === lastXhr ) {                                        
                    response( cache [q] );
                }
            });
        },      
        select: function( event, ui ) {
            $('#location_id').val(ui.item.id);
            $('#selected_location').html(ui.item.label);                        
        }
    }).data( "autocomplete" )._renderItem = function( ul, item ) {
        return $( "<li></li>" )
        .data( "item.autocomplete", item )
        .append( "<a>"+ item.label + "</a>" ) //  + + "<br>" + item.desc + "</a>"
        .appendTo( ul );
    };

I'm using JQuery UI Autocomplete, I have the set of items returned via ajax with the terms highlighted by the search engine (so the label already contains the html). The problem is that every time I choose an item the value with html tags is inserted into the text box which is of course not nice. I wonder if there is anyway I can strip all tags from the label before inserting into the text box

        var cache = {}, lastXhr;
        $('#location_name').autocomplete({
        source: function( request, response ) {                 

            var q = request.term;
            if ( q in cache ) {
                response( cache[ q ] );
                return;
            }

            lastXhr = $.getJSON( "location_search/", {q: q}, function( data, status, xhr ) {
                $.each(data, function(i, v){
                    data[i].label = v.name + (v.address !== null ? ', ' + v.address : '');
                });

                cache[ q ] = data;

                if ( xhr === lastXhr ) {                                        
                    response( cache [q] );
                }
            });
        },      
        select: function( event, ui ) {
            $('#location_id').val(ui.item.id);
            $('#selected_location').html(ui.item.label);                        
        }
    }).data( "autocomplete" )._renderItem = function( ul, item ) {
        return $( "<li></li>" )
        .data( "item.autocomplete", item )
        .append( "<a>"+ item.label + "</a>" ) //  + + "<br>" + item.desc + "</a>"
        .appendTo( ul );
    };

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

欲拥i 2024-11-25 04:20:57

添加此函数:

function stripHTML(oldString) {
  return oldString.replace(/<[^>]*>/g, "");
}

并添加到您的代码中:

$('#location_name').change(function(){
    $(this).val(stripHTML($(this).val());
});

Add this function:

function stripHTML(oldString) {
  return oldString.replace(/<[^>]*>/g, "");
}

And add to your code:

$('#location_name').change(function(){
    $(this).val(stripHTML($(this).val());
});
若水般的淡然安静女子 2024-11-25 04:20:57

为了使这项工作正常进行,您还应该

在选择时传递 item.value ,它首先查找 item.value,然后查找 item.label

你可以留下你的选择的方式:像那样

select: function( event, ui ) {
        $('#selected_location').html(ui.item.label);                        
    }

In order to make this work you should also pass item.value

On select it looks for item.value first and then for item.label

That way you can leave your select: like that

select: function( event, ui ) {
        $('#selected_location').html(ui.item.label);                        
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文