Firefoxで実行すると1になりますが、Chromeで実行すると0になります。
Chromeがselect要素全体を表示する前にコードを実行しているため、Firefoxがselect要素を表示した後にコードを実行するようになっているようです。
次の例ではFirefoxで0が表示されていますが、Chromeでは0と2が表示されます。
var exist = $('option:visible').length;
alert(exist);
exist = $('option:hidden').length;
alert(exist);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select>
<option value='1'>test 1</option>
<option value='1' data-id='2'>test 2</option>
</select>
あなたがそう、none
オプションは、このプロパティdisplay
を持っているか否かを確認され、可視1のために、それが定義されていないので、ないので述べ作品をguradioソリューション条件は真です。
しかし、表示プロパティに関係なく、この要素が実際に表示されているかどうかを尋ねるコードがjQueryに問い合わせていました。
Chromeがこのように実際に動作する理由はわかりません。コードをスタンドアロンのHTMLページに入れても問題は解決しません。
編集:
オーウェンは、異なるブラウザ間の非定義された行動を指摘したように私たちは、Firefoxの動作から見ることができるように、すべてのオプションが、関係なく、displayプロパティの隠されたと考えられていることをjQueryのstates clearlyていても、そうです。
結論として、display
プロパティを設定してチェックし、ネガティブには:selected
と:not(:selected)
などの他のセレクタを使用することをお勧めします。
それは私に1を示す。 –
'alert()'はあなたに1を示しますか?これは不可能です、私はちょうど異なるブラウザとコンピュータから試しました。 –
"選択された状態に関係なく、すべてのオプション要素が非表示と見なされます。" - https://api.jquery.com/visible-selector/ – Owen