2

tmp という配列があります

var tmp = ["05", "13", "27"];

オプション値が tmp 内の値と等しい場合は、そのオプションを特定の optgroup に追加し、そうでない場合は他の optgroup に追加します。値が「27」のオプションを除いて、すべてを optgroup #2 に追加し続けています。私は間違って何をしていますか?

    var groups = $("optgroup");
    $("option").each(function() {
        var value = $(this).val();
        for (var x = 0; x < tmp.length; x++) {
            var isMatch = (tmp[x] === value);
            if (isMatch) {
                $(this).appendTo($(groups[0]));
            } else if (value.length > 0) {
                $(this).appendTo($(groups[1]));
            }
        }

    });

これを修正するための指針をありがとう。

~ck in サンディエゴ

4

2 に答える 2

1

オプションをすべてのtmp値と比較し続けないように、各appendToステートメントの後にブレークを追加する必要があります。

var groups = $("optgroup");    
    $("option").each(function() {        
       var value = $(this).val();        
       for (var x = 0; x < tmp.length; x++) {            
            var isMatch = (tmp[x] === value);            
            if (isMatch) {                
                  $(this).appendTo($(groups[0]));            
                  break;
            } else if (value.length > 0) {                
                  $(this).appendTo($(groups[1]));            
                  break;
            }        
       }    
    });
于 2009-10-08T22:38:38.980 に答える
1

まず、

$(this).appendTo($(groups[1]));

に変更できます

$(this).appendTo(groups[1]);

追加するために要素を jQuery オブジェクトに再度ラップする必要はありません。HTMLElement は正常に機能します。

使用している HTML はあります<option>か? また、値をチェックしている要素はどこにありますか?

編集:

私はあなたのコードを少し書き直しましたが、これは正しく動作します (NB の追加は IE6 では機能しません。また、7 と 8 もそうだと思います。IE では、select 要素の innerHTML プロパティは読み取り専用であるため、createElement または Option コンストラクターを使用してオプションを作成します。 )、

実施例。コードを表示するには、URL に/editを追加作業例の配列にオプション要素がありますが、同様の構造になっていると想定しています。

var groups = $("optgroup");
$('options').each(function() {
    var $this = $(this);
    var val = $this.val();
    if (tmp.indexOf(val) !== -1) {
        $this.appendTo(groups[0]);
    } 
    else if (val.length > 0) {
        $this.appendTo(groups[1]);
    }
});
于 2009-10-08T22:34:45.630 に答える