【问题标题】:How do you push HTML into an array?如何将 HTML 推送到数组中?
【发布时间】:2013-09-18 18:50:36
【问题描述】:
  1. 我有一个数组,它当前正在拉动项目的标题
  2. 这个数组随后被用作 jQuery UI 的自动完成源。
  3. 在 HTML 输入中键入内容时,自动完成功能会从数组中查找标题列表
  4. 我想在单击搜索时向我们提供要附加到 URL 的项目 ID(它当前配置为推送标题,因为那是数组中的内容

将 ID 推入数组时,标题和 ID 自然会显示在自动完成下拉列表中。但是,我不希望显示 ID,我只是根据标题提取它的内容,以便将其附加到 url。

我目前遇到的困难是,如果我尝试创建一个 HTML 结构作为变量以推入一个数组,则在键入时 HTML 会显示在 HTML 输入框中。

例如:

var prodResultTite = $(this).attr('ows_Title');
                        var prodResultID = $(this).attr('ows_ID');
                        var prodResultContainer = '<div class="result" id="' + prodID + '">' + prodTitle + '</div>';

                        //itemTitle.push($(this).attr('ows_Title'));
                        itemTitle.push(prodResultContainer);

这导致输入字段显示:

'<div class="result" id="' + 125+ '">' + My Product Title + '</div>';

如您所见,ID 和 Title 被完美地拉过去了,但是 HTML 也被拖了过去。

在这种情况下,HTML 是否真的是一个 div 而不是一个字符串?

任何帮助将不胜感激:)

【问题讨论】:

    标签: javascript jquery html arrays jquery-ui


    【解决方案1】:

    使用此代码,但只需要注意一点。

    在自动完成中,您应该为每个建议添加一个&lt;a&gt;&lt;/a&gt; 标签,否则您将无法将鼠标悬停在项目上或选择项目。因为它是通过点击&lt;a&gt;&lt;/a&gt; 标签触发的。

    HTML

    <input id="search" type="text"/>
    
    <div id="itemcontainer" style="display:none">
      <div class="item" id="id_1" title="Item 1">Item1</div>
      <div class="item" id="id_2" title="Item 2">Item2</div>
      <div class="item" id="id_3" title="Item 3">Item3</div>
      <div class="item" id="id_4" title="Item 4">Item4</div>
    </div>
    
    <input type="button" id="seeVal" value=" see autocompele html" />
    

    CSS

    .result , .result *{
      color:#f00 !important;
    }
    .result#id_2 ,.result#id_2 *{
      color:#00f !important;
    }
    

    JS

    $(document).ready(function(){
      /*var items = [
      {
        id:1,label:'lbl1'
      },
      {
        id:2,label:'lbl2'
      },
      {
        id:4,label:'the label3'
      },
      {
        id:5,label:'the label4'
      },
    ];*/
    
    var items=[];
    
    $('#itemcontainer').find('.item').each(function(){
      items[items.length]={'id':$(this).attr('id'),'label':$(this).html()}
    });
    
    $('#search').autocomplete({  
      minLength: 0,
      source:items,
      focus: function( event, ui ) {
        $('#search').val( ui.item.label );
        return false;
      },
      select: function( event, ui ) {
        $('#search').val( ui.item.label );
    
        return false;
      }
    }).data( "ui-autocomplete" )._renderItem = (function( ul, item ) {
      var $div=$('<div></div>').addClass('result').attr('id',item.id).html('<a>'+item.label+'</a>');
    return $( "<li>" )
    .append($div)
    .appendTo(ul);
    });
    
      $('#seeVal').on('click',function(){
        alert($('.result').parent().parent().html());
      });
    });
    

    这里是更新的codepen http://codepen.io/anon/pen/sjmeB

    “seeVal”按钮和 CSS 用于测试输出

    【讨论】:

    • 非常感谢您的快速响应。我刚刚尝试过这种方法,不幸的是数组(自动完成下拉菜单)没有被填充并且找不到标题值。 (我之前随机尝试过非常相似的东西)
    • 对不起,我的互联网连接失败。我不明白你的意思?据我所知,您可以使用 JSON 数据源进行自动完成。还有一个 php 文件,它接受输入(文本的值)并生成 JSON。请进一步解释你的意思? (我的英文不太好)。
    • 没问题,感谢您的帮助:)。以前由“Title”变量构建的数组工作得非常好。但是,我正在尝试将带有 ID 和 Title 的 div 容器推送到数组中。执行此操作(您的示例)时,jQuery UI 自动完成的下拉列表不会显示任何可供选择的值。我希望这会有所帮助。
    • 哦,所以您正在尝试创建一个显示 div 而不是简单文本的自定义下拉菜单?
    • 抱歉迟到了,我很忙,而且我的互联网连接太慢了。检查一下,这应该是您要查找的内容。如果是,请告诉我。 codepen.io/anon/pen/sjmeB
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-06
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    相关资源
    最近更新 更多