我想知道是否有人可以建议使用jQuery循环遍历<option>
元素中的所有<select>
并构建数组的最佳方法。
例如
而不是以下内容,其中字符串ins传递给autoCompleteArray(),
$("#CityLocal").autocompleteArray(
[
"Aberdeen", "Ada", "Adamsville", "Zoar" //and a million other cities...
],
{
delay:10,
minChars:1,
matchSubset:1,
onItemSelect:selectItem,
onFindValue:findValue,
autoFill:true,
maxItemsToShow:10
}
);
...我需要遍历<options>
中的所有<select>
并将它们推入数组,然后将该数组变量传递给函数而不是长字符串。
例如,
$("#CityLocal").autocompleteArray(
[
MyBigArrayOfOptions
],
{
delay:10,
minChars:1,
matchSubset:1,
onItemSelect:selectItem,
onFindValue:findValue,
autoFill:true,
maxItemsToShow:10
}
);
如果您能建议如何以正确的格式将内容推送到数组中,我将不胜感激。我几乎怀疑这个站点上另一个帖子的循环部分。
感谢。
答案 0 :(得分:8)
这应该有效:
$(document).ready(function(){
// array of option elements' values
var optionValues = [];
// array of option elements' text
var optionTexts = [];
// iterate through all option elements
$('#sel > option').each(function() {
// get value/text and push it into respective array
optionValues.push($(this).val());
optionTexts.push($(this).text());
});
// test with alert
alert(optionValues);
alert(optionTexts);
});
鉴于您的select
元素具有ID sel 。
答案 1 :(得分:6)
jQuery.map功能可能就是你要找的东西。下面的代码将创建一个数组,其中包含<select>
选项的所有值或文本值。
var values = jQuery.map(jQuery("#select")[0].options, function(option)
{
return option.value;
});
var texts = jQuery.map(jQuery("#select")[0].options, function(option)
{
return option.innerHTML;
});
答案 2 :(得分:2)
您需要做的就是将数组作为第一个参数传递,不带括号。括号创建一个新数组,但您不需要这样做,因为您已经传递了一个数组。只是做:
$("#CityLocal").autocompleteArray(
MyBigArrayOfOptions,
{
delay:10,
minChars:1,
matchSubset:1,
onItemSelect:selectItem,
onFindValue:findValue,
autoFill:true,
maxItemsToShow:10
}
);
答案 3 :(得分:2)
如果我理解您的问题,以下代码应该满足您的需求:
myFunction($("#my-select option"));
查询的输出已经是一个选项数组,它们是select的后代,因此您不需要将它们推送到另一个数组中。或者,如果您的选择没有id,但您有DOM元素:
myFunction($("option", theSelect));
将这个想法重新纳入您的代码:
$("#CityLocal").autocompleteArray(
$("option", theSelect),
{
delay:10,
minChars:1,
matchSubset:1,
onItemSelect:selectItem,
onFindValue:findValue,
autoFill:true,
maxItemsToShow:10
}
);