繁体   English   中英

如何获取可见选项的HTML选择标记数,具有多个属性集,而未设置大小?

[英]How to get visible options' count of HTML select tag, with multiple attribute set, while size not set?

在我的情况下,我想得到select元素的可见选项'count(通过可见选项'计数,我的意思是有多少选项在没有滚动的情况下可见 。感谢Matthew)。 如果设置了size属性,那么element.size是我需要的值。 如果不是,事情变得有点棘手。

例如,在以下代码中:

<select multiple="multiple">
    <option>text1</option>
    <option>text2</option>
    <option>text3</option>
</select>

在IE / Chrome / Firefox中,它将如下图所示。 在这种情况下, 计数应为3:

在这种情况下,计数应为3

如果前一种情况下的选项计数大于4,则仍显示4条可见线。 在这种情况下, 计数应为4:

在这种情况下,计数应为4

除了使用if ... else ...之外 ,还有一种好方法可以在任何情况下获得可见选项的选择标记数量吗?

仅供参考,我正在开发一个测试软件来为客户的网站进行功能测试,因此我无法修改网页的代码。

我希望我理解正确:

 var maxVisibleCount = Math.floor(containerHeight / optionHeight);
 var actualCount = $(this).children('option').length;
 var result = (maxVisibleCount > actualCount) ? actualCount : maxVisibleCount;

现场演示: https//jsfiddle.net/md13qq0d/

编辑:对不起,我还没有看到你没有使用jQuery: https//jsfiddle.net/md13qq0d/2/

您可以为您的选择标记提供ID,并使用该ID,您可以轻松检索否。 特定选择标签中的可见项目(选项)。例如 -

<script type="text/javascript">  
alert($('#selectid option').length);  
</script>  

这里' selectid '是给你想要的可见选项的特定选择的id。

请检查你的数量......

  function GetSelected () {
        var select = document.getElementById ("mySelect");
        var txt = "";
        for (var i = 0; i < select.options.length; i++) {
            var isSelected = select.options[i].selected;
            isSelected = (isSelected)? "selected" : "not selected";
            txt += "The " + i + " option is " + isSelected + "\n";
        }
        alert (txt);
    }

我找到了这个问题的新解决方案,看起来似乎更好。 这是代码:

var e = document.getElementById("id_to_select");
var threshold;

if (e.size > 0) {
    threshold = e.size;
} else { // size not set
    threshold = e.multiple ? 4 : 1; // Why 4, please see below
}
return Math.min(e.length, threshold);

select元素有一些基本的事实让我编写这样的代码:

  • 如果将size属性设置为有效值(大于0),则可见项的计数取决于element.size和element.length之间的关系,无论是否有多个 set。
  • 如果未设置大小 ,但设置了多个 ,则计数将取决于element.length和4之间的关系,这是多模式下大小的默认值。 有关更多信息,请参阅select元素的规范
  • 如果未设置大小倍数 ,则计数将为1或0,这取决于select是否具有选项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM