1

最初の項目として「any」オプションを持つ同じコンテナーに複数のドロップダウン リストがあります。選択されている単一のオプションのテキストを取得しようとしています。または、「任意」が選択されている場合 (値 = 0)、そのリスト内のオプションの REST OF の配列を取得します (ただし、「任意の」オプションではありません)。 . 一部のリストで選択されていないオプションを探しているため、シリアライズはもちろん機能しません。

私の簡単なテストでは、選択されていないオプションテキストのテキストを単一の選択で取得するために、次のことが機能しました。

var opts = $('select > option:not(:selected)').map(function() { return this.text; }).get();

しかし、それをコンテナと同じ数の選択をサポートするように変換したとき (不明な数)、問題が発生しました。map( ..).get() / array concat は私にとって最も明白な方法です。ループ/プッシュは面倒に思えます(jquery内に同じ手順を隠しているだけであっても)

    var val = [];
    jQuery("select :selected", "#container").each(function () {
        if ($(this).val() == 0) { // "any"
            // _val.concat($(this).siblings().map(function() {return this.text; }).get()); // didn't work, even though siblings matches everything OTHER THAN the selected item
            _val.concat($('option:not(:selected)', $(this).parent()).map(function() { return this.text; }).get()); // didn't work either, even though this is all the options not selected mapped to an array
            //for (var i=0;i<$(this).siblings().length-1;i++) _val.push($(this).siblings().get(i).text()); // no; even though it is a <HTMLOptionElement>; ignore the potential bug in i if you spot it, it doesn't affect me!
        } else {
            _val.push(this.text); //$(this).text());
        }
    });
    _val.push(jQuery("input","#container").val());
    alert(_val.join(" ").toLowerCase()); // all my drop downs + my fields

いつものように、これは私が解決するにはあまりにも明白すぎる愚かな小さなことになるでしょう (そして、ここは夜遅くです)。

4

2 に答える 2

0

これが私が思いついた解決策です:

    var _val = [];
    jQuery("select", "#container").each(function() {
        if ($(this).val() == 0) {
            jQuery.merge(_val, $(this).find('option:not(:selected)').map(function() { return this.text.toLowerCase(); }).get());
        } else {
            _val.push($(this).find('option:selected').map(function() { return this.text.toLowerCase(); }).get());
        }
    });
    _val.push(jQuery("input","#container").val().toLowerCase());
于 2012-10-19T02:50:46.407 に答える
0

スクリプトを次のように変更しました。

var val = [];

jQuery("select", "#container").each(function() {
    if ($(this).val() == 0) {
        val.push($(this).find('option:not(:selected)').map(function() {
            return this.text;
        }).get());
    } else {
        val.push($(this).find('option:selected').map(function() {
            return this.text;
        }).get());
    }
});

alert(val.join(", ").toLowerCase()); 

このFIDDLEを参照して、期待どおりに動作するかどうかを確認してください。

于 2012-10-18T08:54:02.403 に答える