jQuery .is(“:visible”)适用于Firefox但不适用于Chrome

时间:2012-02-02 15:41:30

标签: javascript jquery

  

可能重复:
  jquery .is(“:visible”) not working in Chrome

我试图获取数组中的所有可见项。它在Firefox中运行良好,但不适用于Chrome。

这是我的代码:

$.each (t.config.promoInput, function (i, v) {
    var size = 0;

    $.each ($(v).find('option'), function (i, v) {
        $(v).show() // Show all options in <tt>$(v)</tt>.
            .not(':first-child') // Don't hide <tt>(All)</tt>.
            .not(':Contains("' + t.config.searchSpanInput.val() + '")') // Don't hide options that match the searchCriteria.
            .hide(); // Hide everthing that doesn't match or isn't (All).

        if ($(v).is(":visible")) {
            size++;
        }
    });
});

在Firefox尺寸增量中,而Chrome尺寸保持等于0。

编辑::包含是我自己对jQuery库的补充。它是一个不区分大小写的版本:contains。

2 个答案:

答案 0 :(得分:0)

为什么不检查"display"属性,如果它是"none"而不是隐藏的属性,如果它是"inline"而不是可见:

$.each (t.config.promoInput, function (i, v) {
    var size = 0;

    $.each ($(v).find('option'), function (i, va) {
        $(va).show() // Show all options in <tt>$(v)</tt>.
            .not(':first-child') // Don't hide <tt>(All)</tt>.
            .not(':Contains("' + t.config.searchSpanInput.val() + '")') // Don't hide options that match the searchCriteria.
            .hide(); // Hide everthing that doesn't match or isn't (All).

    });
    //add only visible options
   if ($(va).css("display") === "inline") {
        size++;
    }
});

看这里http://jsfiddle.net/gwbTm/2/(我用Chrome测试过) 我认为设置<option>的可见性会导致浏览器出现问题(尤其是IE)

答案 1 :(得分:0)

跨浏览器(禁用/启用)不支持隐藏和显示,(启用/禁用)选项。有关您的问题的一种可能解决方案,请参阅此问题:jQuery disable SELECT options based on Radio selected (Need support for all browsers)

一旦你修剪了选项,你就可以使用长度来获得大小。