0

選択されたオプションに応じて選択ボックスの css を設定するコードを継承しました。ページには多くの選択ボックスがあり、私の目標は、「失敗」の css スタイルを持つ選択ボックスを取得することです。

比較的近づいたと思いますが、うまく機能させることができません。比較的近いということは、CSS クラスを JavaScript アラート ボックスに表示できることを意味しますが、そのテキスト値を if ステートメントで使用しようとしても何も起こりません。そのコードは以下です。

感謝して受け取ったポインタ。

$("select").each(function () {
   alert(this.options.item(this.options.selectedIndex).className);
   if (this.options.item(this.options.selectedIndex).className == 'frm_ddl_notOk') {
      alert('bunter?');
   }
});

20時間後に編集...

私はばかです。探していたクラスのつづりを間違えました。「form_ddl_notOk」である必要があります。気付くのにどれだけ時間がかかったのか、明らかに憂鬱です。特に、プロンプト ボックスを使用した後は、クラス名をカット アンド ペーストしてコードに戻すことができました (そして、実行しませんでした!)。

質問とともに投稿した不完全なコードは、正しいクラス名を使用すると機能しました。

私の質問の背景と、他の質問やコメントへの回答は次のとおりです。

「失敗」の要素を見つけたら、「コメント」と呼ばれる兄弟要素を探し、「コメント」を埋めることを義務付けます。オプション テキストに基づいて選択することはできません。クラスや bgcolor に基づいて選択する必要があります。スタイルは select 要素と option 要素に適用されます。物事を理解しようとするためだけに、より一般的なセレクターを使用していました。

返信ありがとうございます。それらのいずれかを「回答」としてマークする必要があるかどうかはわかりません。この Q が削除された場合、宇宙はおそらく問題なく続行されます。

4

5 に答える 5

1

すべての要素を選択する代わりに<select>、セレクターを変更します。

$("select.frm_ddl_notOk").each(function () {

});

これは、クラスセレクター ( .) - http://api.jquery.com/class-selector/を使用します。特定のクラスの要素のみを返します。したがって、あなたの場合、すべての<select>要素を探し、クラス「frm_ddl_notOk」があるかどうかに基づいてそれらをフィルタリングします。

しかし、より読みやすいのは次のとおりです。

$("select").filter(".frm_ddl_notOk").each(function () {

});

特定のクラスを持つ要素をターゲットにしている場合はこれですべてです<select>(これはあなたの質問が説明しているようです)。しかし、あなたのコードでは、<option>要素 (特に選択されたもの) を見て、クラスがあるかどうかを確認しているようです (jQuery の hasClass - http://api.jquery.com/hasClass/を使用)。もしそうなら、次のようなことを試すことができます:

$("select").each(function () {
    var $this = $(this);
    if ($this.find("option").filter(":selected").hasClass('frm_ddl_notOk')) {
        alert('bunter?');
    }
});

これにより、すべての要素に対して選択された 要素が見つかり、見ているクラスが含まれている場合は警告が表示されます。<option> <select>

:selectedセレクターを使用する- http://api.jquery.com/selected-selector/

したがって、選択したオプションを取得したい場合は、次を使用してください。

$("select").find("option").filter(":selected")

選択したオプションを設定する場合は、次を使用します。

$("select").find("option").eq(YOUR INDEX).prop("selected", true);

http://api.jquery.com/eq/

http://api.jquery.com/prop/

<select>最後に、特定の要素を操作する必要がない場合は、次のようにします。

$("select").find("option").filter(":selected").filter(".frm_ddl_notOk").each(function () {
    // The <option>s that have the "frm_ddl_notOk" class
});

この例では、すべての<select>要素を検索し、それらの<option>子を調べ、選択された要素のみを調べ、クラス "frm_ddl_notOk" のみを調べます。

于 2013-03-27T19:25:25.990 に答える
0

これを試して:

$("select").each(function () {
   if ($(this.options[this.selectedIndex]).hasClass('frm_ddl_notOk')) {
      // do what must be done.
   }
});
于 2013-03-27T19:25:27.647 に答える
0
$("select").each(function (i, ele) {
     if ( $('option:selected', ele).is('.frm_ddl_notOk') ) {
         alert('bunter?');
     }
});
于 2013-03-27T19:26:04.573 に答える
0

質問とともに投稿したコードは、正しいクラス名を使用すると機能しました。

className == 'form_ddl_notOk'

于 2013-03-28T17:57:48.567 に答える
-1

コードには 2 つの改善点があります
。1) セレクターをより効率的にすることができます
。2) 「this」の使用が正しくありません。コールバック関数の 2 番目の引数を次のように使用します$(this)$(element)each()element

/*You get your <select class="frm_ddl_notOk"> element*/
$("select.frm_ddl_notOk").each(function(index, element) {
   /* Get the <option> tag like this $(element).find("option:selected") */
   alert("Your option element is "+ $(element).find("option:selected"));
   alert('bunter?');
});

超怠け者の場合:親タグのクラスで$("select.frm_ddl_notOk option:selected")選択されたすべてのタグを取得するために使用し<option>ます。"frm_ddl_notOk"<select>

于 2013-03-27T19:48:32.987 に答える