如何使用自动完成搜索jquery在新标签中打开结果?

时间:2018-07-15 21:37:20

标签: javascript jquery search autocomplete

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

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>

1 个答案:

答案 0 :(得分: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 );
            };