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.

これはコンボとは関係ありません。

コンボにa を追加/削除するときはいつでも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;
          }
       }
   }
}

お役に立てれば。

于 2012-11-19T09:24:32.047 に答える