2010-11-02 34 views
2

我对他们有一些HTML这样jQuery的隐藏()和show()不工作 - 极度Frustated

<div id="topContainer"> 
<div id="level1" style="display:none;"> </div> 
<div id="level2" style="display:none;"></div> 
</div> 

我可以检索Level1和Level2,调用显示()和隐藏()成功。但是,有style =“display:none;”然后调用jQuery(“#topContainer”)。show()做nada。 :(

怎么可能是错的?

JS下面

//LOGIC HERE THAT SHOWS LEVEL1 and LEVEL2 based on business logic 

//If neither div is shown (got a variable set to false, it set to true each time 
//the business logic shows the div 
//if variable is still false, then the below line runs 
jQuery("#topContainer").hide() 

尽可能多的代码更新,我可以。对父母

+1

定义** **虚无缥缈。另外,哪些元素具有'style =“display:none;”?这是在你的CSS?请澄清你的问题。 – RPM1984 2010-11-02 23:55:51

+0

我没有收到任何错误。我只看到顶层div仍然显示。我叫了皮,它仍然存在。 :( – bobber205 2010-11-03 00:03:07

+0

风格=“显示:无”是在HTML标记 – bobber205 2010-11-03 00:03:46

回答

5

.show().hide()不影响孩子,如果他们隐藏他们留下隐患......他们独立处理。

但是,您可以拨打.show()上孩子以及需要的话,例如:

jQuery("#topContainer").show().children().show(); 
+0

我想隐藏父母及其所有孩子。 – bobber205 2010-11-02 23:56:36

+0

@ bobber205 - 在这种情况下,只需要'jQuery(“#topContainer”)。hide()'就可以了...确保你在一个'document.ready'处理程序中调用它, :'$(function(){jQuery(“#topContainer”)。hide();});' – 2010-11-02 23:57:35

+0

调用hide的代码与其子节点的shows()具有* same *函数。字面紧挨着彼此。它也在ready()函数中。 :) – bobber205 2010-11-02 23:58:38

0

$("#topContainer").css("display", "block");工作吗?

是否$("#topContainer").css("background", "red");工作?

你有没有戳周围萤火虫或其他什么东西,可以前后显示实际的DOM属性,随治级联一起。

我怀疑#topContainer正在通过别的方法设置display,或者另一个存在另一个带有#topContainer的div(这将是无效的HTML)。

1

不知逻辑隐藏#topContainer引起的问题。我在这里设置了一个演示来显示:empty选择器的实用程序;但为了让一个元素被视为空的,甚至不能包含一个空格(文本节点)。

使用您提供的HTML。我已经设置了一个demo here ...在div中添加内容,然后重新运行脚本,您可以看到差异。

var container = $('#topContainer'), 
    divs = container.find('div'), 
    empty = divs.filter(':empty'); 

if (divs.length == empty.length) { 
    // hide container! 
    $('#topContainer').hide(); 
    alert('hidden!'); 
} else { 
    // don't do anything 
    alert("don't hide!"); 
}