3

我需要数组或 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

我必须将请求参数中的这些值传递给服务器,并且我不想通过循环。请提出优化的解决方案。

4

2 回答 2

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

于 2012-11-19T10:11:32.263 回答
0

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

这与组合没有任何关系。

每当您option向组合添加/删除 a 时,只需调用一个函数,该函数随后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;
          }
       }
   }
}

希望这可以帮助。

于 2012-11-19T09:24:32.047 回答