【问题标题】:how to open result in new tab with autocomplete search jquery?如何使用自动完成搜索 jquery 在新选项卡中打开结果?
【发布时间】:2018-12-23 10:44:02
【问题描述】:

以下是在我的菜单页面中搜索的代码,它工作正常,但缺少一些选项.. 如果您能提供帮助,请:

1- 我需要用特殊颜色突出显示我输入的与搜索结果匹配的字母。 2-需要允许用鼠标右键单击打开结果并在新选项卡中将其作为链接打开。 3-点击结果时,我需要在搜索文本输入中获取结果名称而不是它自己的链接。

这是我的代码:

$(function () {
            var menuPages = $('#main-menu li a:has(.childtitle)').map(function () {
                return {
                    label: $(this).text(),
                    value: $(this).attr('href')
                };
            }).toArray();
            $("#txt_MenuSearch").autocomplete({
                source: menuPages,
                select: function (event, target) {
                    var link = target.item.value;
                    window.open(link);
                }
            });
        });
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
  <link rel="stylesheet" href="/resources/demos/style.css">
  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<input type="text" id="txt_MenuSearch" class="search-input" placeholder="Search here.." />

    <ul id="main-menu">   
        <li class="has-sub"><a href="javascript:;"><span class="title">Menu Header1</span></a>
           <ul>
              <li><a href="yahoo.com"><span class="childtitle">brand one</span></a></li>
              <li><a href="gmail.com"><span class="childtitle">brand two</span></a></li>
           </ul>	
    	</li>
    
        <li class="has-sub"><a href="javascript:;"><span class="title">Menu Header2</span></a>
           <ul>
              <li><a href="bmw.com"><span class="childtitle">Car BMW</span></a></li>
              <li><a href="toyota.com"><span class="childtitle">Car Toyota</span></a></li>
              <li><a href="opel.com"><span class="childtitle">Car Opel</span></a></li>
              <li><a href="kia.com"><span class="childtitle">Car Kia</span></a></li>
           </ul>
    	</li>
    </ul>

【问题讨论】:

    标签: javascript jquery search autocomplete


    【解决方案1】:

    1 - 对于突出显示,使用正则表达式替换自动完成的 _renderItem API 函数中所有显示的列表项的匹配文本。

    2 - 对于右键单击并显示上下文菜单,只需用锚标记包装每个匹配项。

    3 - 要将标签文本而不是链接/值注入搜索字段,请更新您的“搜索”和“焦点”事件,以便它们将搜索输入的值设置为标签文本而不是值。

    这是一个示例:

    var menuPages = $('#main-menu li a:has(.childtitle)').map(function () {
                    return {
                        label: $(this).text(),
                        value: $(this).attr('href')
                    };
                }).toArray();
                $("#txt_MenuSearch").autocomplete({
                    source: menuPages,
                    select: function (event, target) {
                        /* On select, show item's label in text input */
                        event.preventDefault();
                        $("#txt_MenuSearch").val(target.item.label); 
                    },
                    focus: function(event, ui) {
                        /* On focus, show item's label in text input */
                        event.preventDefault();
                        $("#txt_MenuSearch").val(ui.item.label);
                    }
                });
    
                /* Highlight text and handling right-clicking context menu */
                $("#txt_MenuSearch").data("ui-autocomplete")._renderItem = function (ul, item) {
    
                    var newText = String(item.label).replace(
                                    new RegExp(this.term, "gi"),
                                    "<span class='ui-state-highlight'>$&</span>");
    
                    /* Wrapping the matching option within anchor tags */
                    newText = '<a href="'+item.value+'">'+newText+'</a>';
    
                    return $( "<li>" )
                    .attr( "data-value", item.value )
                    .append( newText )
                    .appendTo( ul );
                };
    

    【讨论】:

    • thnx @Kevin 非常感谢,你完美地解决了我的 2 分,但第三个可能是你没有明白我的意思是右键单击结果,为了清除这个我的全部需要做的是能够右键单击结果并可以在“在新选项卡中打开”中打开它作为任何一般链接..我希望你现在明白我的意思了:)
    • @MuhammadS.Eltyar 非常抱歉造成误解。我刚刚更新了上面答案中的代码。您需要做的就是:在 _renderItem 函数调用期间,每个匹配的结果都需要被包裹在锚标签中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 2011-08-29
    • 1970-01-01
    • 2014-08-14
    相关资源
    最近更新 更多