5

jquery:visibleとセレクターは:hidden少し誤解を招く可能性があります。ドキュメント内のスペースを消費する要素を選択します。visibility:hidden:visible

:reallyvisible、目で見ることができる要素のみを選択できるようにする必要がありますopacity:0visibility:hidden

明らかに、要素が視覚的に見えるようにするには、その先祖もすべて見える必要があるため、ツリーを再帰的に検索する必要があると思います。

これは高すぎるだけですか?これを達成するための信頼できる効率的な方法を誰かが提案できますか?

4

2 に答える 2

3

どうですか:

$.expr[':'].reallyVisible = function(node, idx){

   while(true){

      // should be faster than $(node).css()
      var css = document.defaultView.getComputedStyle(node, null);

      if(css.opacity == 0 || css.visibility == 'hidden')
        return false;

     node = node.parentNode;

     if(!node || node === document)
         break;
   }        

   return true;
}

http://jsfiddle.net/jxEFk/

于 2013-07-17T11:32:28.413 に答える
1

このコードを試してください:

function isVisible(el){
    if (el.css('opacity') != '0' && el.css('visibility') != 'hidden') {
        return true
    }
    return false
}

$('myelement').filter(function () {
    visible = true

    if (isVisible($(this)) == false)
        visible = false

    $(this).parents().each(function(){
        if (isVisible($(this)) == false)
            visible = false
    })

    return visible == true
}).html("I'm really visible !")
于 2013-07-17T11:21:15.663 に答える