3

次のスニペットは、chrome 23、firefox 3.5、およびIE9でテストされました。

<!DOCTYPE html>
<html><head>
      <title>test</title>
      <script src="jquery-1.7.2.min.js"></script>
      <script>
          $(function() {
              $('#id1 *').not('.c1 *').attr('disabled', true);
          });
      </script>
</head><body>
      <div id="id1">
            <div class="c1">
                <input type=radio>td1</input>
            </div>
            <div class="c2">
                <input type=radio>td2</input>
            </div>
      </div>
</body></html>

td2のみを無効にする必要がありますが、通常の容疑者(IE9)はtd1とtd2を無効にします。
この問題をどのように回避しますか?

回答
実際、問題はjqueryセレクターが原因ではなく、IE9で要素が属性「disabled」になるとすべてのサブ要素が無効になるという事実が原因でした。ただし、これはChromeとFFでは発生しません(少なくとも上記のバージョンでは)。
詳細はこちら: 無効にした「div」はどのように機能する必要がありますか?

4

3 に答える 3

4

代わりにこのセレクターを試してください。

$('#id1 :not(.c1) input').attr('disabled', true);

http://jsfiddle.net/QTG7S/


あなたが書いたものはおそらく次のように書き直されるべきです:

$('#id1 *').not('.c1').find("*").attr('disabled', true);

http://jsfiddle.net/QTG7S/2/

于 2012-12-20T13:47:52.533 に答える
1
$('#id1 div').each(function (){
    $(this).children('input').attr('disabled', !$(this).hasClass("c1"));
});

http://jsfiddle.net/hJTzW/4/

于 2012-12-20T13:49:29.930 に答える
1

IEはおそらく正しいことをしています:

  • $('#id1 *')#id12つのdivタグと2つの入力タグを提供するすべてのタグを選択します
  • .not('.c1 *')上記のリストから内部の入力タグを削除する.c1と、2つのdivと1つの入力の3つの要素になります。
  • 結果に応募disabled=disabledします。IEでは、<div disabled=disabled>...</div>divタグとその中のすべてを無効にします。

私はあなたがこのような望ましい結果を達成できると信じています:

$('#id1 div:not(.c1) :radio').prop('disabled', true);
于 2012-12-20T14:00:37.830 に答える