可见选项元素的长度始终显示为“0”

Length of visible option elements always shows `0`

我只想知道 length 个可见的 option 个元素。

所有元素的相同值是必须有

下面的代码总是显示0.

请帮忙。

$('select option[data-id=2]').hide();
var exist = $('select option[value=1]:visible').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>

截图:

$('select option[data-id=2]').hide();

var length = $('select option[value=1]').filter(function() {
     return $(this).css('display') != 'none';
}).length;

alert(length);
<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>

试试这种检查方式。过滤它然后检查是否显示块然后进行长度计数

我在 Firefox 中 运行 时得到 1,但在 Chrome 中运行 时得到 0。

问题似乎出在 Chrome 运行 显示整个 select 元素之前的代码,而 Firefox 运行 显示 [= 之后的代码49=]元素.

以下在 Firefox 中显示 2 后跟 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>

guradio 所述的解决方案有效,因为您正在检查该选项是否具有此 属性 display,对于可见的选项,它未定义,因此没有 none, 所以条件为真.

但是,您的代码询问 jQuery 此元素是否实际可见,无论显示如何 属性。

我不确定为什么 Chrome 真的会这样,即使我将代码放在独立的 html 页面中,问题仍然存在。

编辑:

似乎 Owen 指出了不同浏览器之间的未定义行为,尽管 jQuery states clearly 所有选项都被认为是隐藏的,而不管显示 属性,我们可以从 Firefox 的行为来看。

总而言之,您最好坚持设置并检查 display 属性 是否符合您的要求,并使用其他 select 或 :selected:not(:selected) 表示否定。