我正在使用jQuery Autocomplete,但它将所有XML条目作为一个列表项而不是一个项/关键字返回
这是我的示例XML
<keywords>
<keyword>Hello</keyword>
<keyword>asdfasd</keyword>
<keyword>fsdgs</keyword>
<keyword>Helqerqlo</keyword>
<keyword>Hello</keyword>
<keyword>Hello</keyword>
<keyword>shjfg</keyword>
<keyword>zcxvv</keyword>
<keyword>Hello</keyword>
<keyword>fjhfhg</keyword>
<keyword>Hello</keyword>
<keyword>fdgs</keyword>
<keyword>gfhdgh</keyword>
<keyword>sdfgsdf</keyword>
<keyword>dfghd</keyword>
<keyword>xvcb</keyword>
<keyword>dfghdgh</keyword>
<keyword>Heldfghdglo</keyword>
</keywords>
和jQuery:
$(document).ready(function(){
$.ajax({
url: "xml1.xml",
dataType: "xml",
success: function( xmlResponse ) {
var data = $( "keywords", xmlResponse ).map(function() {
return {
value: $( "keyword", this ).text()
};
}).get();
$('#ctl00_MainContentPlaceHolder_txtSchool').autocomplete({
source: data,
minLength: 0
});
}
});
});
以下是自动填充下拉列表中的唯一选项(所有关键字都拼凑为一个长关键字)
HelloasdfasdfsdgsHelqerqloHelloHelloshjfgzcxvvHellofjhfhgHellofdgsgfhdghsdfgsdfdfghdxvcbdfghdghHeldfghdglo
感谢任何帮助。
谢谢, 托马斯
答案 0 :(得分:0)
您应该使用正确的jQuery工具来处理XML,这样可以更容易: - )
var data = $(xmlResponse).find("keyword").map(function() {
return { value: $(this).text() };
}).get(); // by the way, what is this 'get' for?
另外,看一下你的代码,对于一个“简单”的AutoComplete来说,这似乎相当冗长。你可以看一下:http://docs.jquery.com/Plugins/autocomplete
<强>更新强>
我认为问题在于,.map()
是xml的根元素。它们中只有一个,这意味着,您只能从.map()
函数中获得一个结果。在jQuery站点的示例中,xml的结构有点不同。所以我试试这个(它与上面基本相同):
var data = $( "keyword", xmlResponse ).map(function() { // changed keywords to keyword
return {
value: $( this ).text() // changed $("keyword", this) to $(this)
};
}).get();
我没有对它进行过测试,但我认为应该这样做。
答案 1 :(得分:0)
你的问题是
value: $( "keyword", this ).text()
text()返回关键字... simples
的innerText你应该回来:
value: $( "keyword", this )