循环遍历<select>并以以下格式构建数组:“value1”,“value2”,“value3”</select>

时间:2008-10-23 21:48:19

标签: javascript jquery autocomplete

我想知道是否有人可以建议使用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
            }
        );

如果您能建议如何以正确的格式将内容推送到数组中,我将不胜感激。我几乎怀疑这个站点上另一个帖子的循环部分。

感谢。

4 个答案:

答案 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
    }
);