获取选项的数组或JSON中的选择的值列表,而不使用循环或jQuery

时间:2012-11-19 09:16:41

标签: javascript jquery json

我需要数组或JSON中的选项值列表。 我使用了以下代码。

var compArray=[];
jQuery("#myCombo option").each(function(){
       compArray.push(jQuery(this).val());
       });

但我不想在循环中迭代选项,因为我的选项列表可以增长。 我用过

JSON.stringify(document.getElementById("myCombo").options)

但是在stringify上它显示了空的JSON对象,尽管我可以从

获得值
document.getElementById("myCombo").options[0].value

我必须将请求参数中的这些值传递给服务器,我不想经历循环。 请建议优化的解决方案。

2 个答案:

答案 0 :(得分:1)

您可以使用以下自定义序列化程序:

var options = Array.prototype.slice.call(document.getElementById("sel").options),
    str = JSON.stringify(options, function(key, value){
       if(key === ""){
           return value;   
       }
       if(!isNaN(parseInt(key))) {
          return value.value;   
       }
    };

http://jsfiddle.net/Vh9qD/

或者使用迭代而不为每个选项创建jQuery实例

var options = Array.prototype.slice.call(document.getElementById("sel").options),
    str = JSON.stringify(options.map(function(item){return item.value;}));

检查此性能测试:http://jsperf.com/get-options

答案 1 :(得分:0)

But i dont want to iterate the options in a loop because my options list can grow.

这与组合没有任何关系。

每当您向组合添加/删除option时,只需调用一个函数,该函数随后会从您的数组中添加/删除option

function addDeleteListInArray( oVal, addDelete ) {
   if( addDelete ) {
       // add to array
       compArray.push( oVal );
   } else {
       // delete from array
       for( var i=0; i< compArray.length; i++ ) {
          if( compArray[ i ] == oVal ) {
              compArray.splice( i, 1 );
              break;
          }
       }
   }
}

希望这有帮助。