【发布时间】:2013-06-25 06:46:48
【问题描述】:
这是我的 JSON 格式的数据源:
{
"list-1":
[{"id":"1","value":"andy"},{"id":"2","value":"sandy"}],
"list-2":
[{"id":"1","value":"candy"},{"id":"2","value":"brandy"}],
"list-3":
[{"id":"1","value":"mandy"},{"id":"2","value":"dandy"}]
}
我正在尝试获得以下输出:
<div id="result">
<ul class="list-1">
<li>andy</li>
<li>sandy</li>
</ul>
<ul class="list-2">
<li>candy</li>
<li>brandy</li>
</ul>
<ul class="list-3">
<li>mandy</li>
<li>dandy</li>
</ul>
</div>
默认的数据源(JSON格式)如下:[{"id":"1"},{"foo":"bar"}],我一直没找到好的/易于遵循有关如何检索多维数据数组的文档/教程。
谁能帮我解释一下,我需要在 JQuery AutoComplete 插件中修改/覆盖什么以实现此输出(在 Select 或 Success 事件中?或者我应该修改渲染部分以及如何修改)
提前致谢
【问题讨论】:
-
这是一个带有自定义输出和默认单维数据的示例运行代码codepen.io/anon/pen/FqEJt(感谢stackoverflow.com/a/2746987/2518765)
-
我找到了一种解决方法,编辑数据源使其成为一维数据源并将
type添加到每个项目,然后在 renderItem 函数中检查类型,如果类型是list=1我使用 IDlist-1将该项目附加到我的自定义 UL。虽然这可行,但这并不完全是我所追求的,如果有人想出更好的主意,我会把问题留在这里。代码在下一条评论中。 -
jQuery("#toplivesearch").data("autocomplete")._renderItem = function( ul, item ) { var container; if(item.type == "list-1"){ container = $("#list-1"); } if(item.type == "list-2") { container = $("#list2"); } if(item.type == "list-3") { container = $("#list-3"); } return $("<li></li>").data("item.autocomplete", item).append("<a>" + item.label + "</a>").appendTo(container); };你必须在 html 中创建自己的 UL<ul id="list-1"></ul><ul id="list-2"></ul>等等最后你会得到一个额外的空 UL,你可以隐藏它。
标签: jquery json autocomplete