我有一个div被隐藏的情况,即使我刚刚执行的代码显示所有其他具有相同后缀的div:$(“[id $=’ – input-container’]”).show()
无论如何,一个特定的div仍然是隐藏的:$(“#single-colorRange-color-input-container”).我想也许它稍后隐藏在代码中但没有 – 在调用$inputContainers.show()后立即添加日志记录如下(并且调试器语句会停止所有后续执行):
console.log($("#single-colorRange-color-input-container").css('display')); $inputContainers.show(); console.log($("#single-colorRange-color-input-container").css('display')); console.log($("#single-colorRange-color-input-container")[0].hidden); console.log($("#single-colorRange-color-input-container").is(':hidden')); debugger;
在调用.show()之前,首先将none记录为css / display值.这是预料之中的.
然后在调用.show()之后将块记录为css / display值.这是预料之中的.
然后将false记录为结果集的第一个(唯一)元素的隐藏属性.这是预料之中的.
然后将true记录为调用.is(‘:hidden’)的结果.这是出乎意料的.
.css(‘display’)怎么能阻止,[0] .hidden是假的,而.is(‘:hidden’)是真的吗?尽管调用了.show(),但实际上div实际上仍然是隐藏的,如果有一些合理的解释,为这一个div添加特殊逻辑似乎是荒谬的.
解决方法
根据
jQuery documentation ,隐藏选择器可以在以下任何情况下返回true
>它们的CSS显示值为none.
>它们是type =“hidden”的表单元素.
>它们的宽度和高度显式设置为0.
>隐藏了一个祖先元素,因此该元素不会显示在页面上.
因为hidden是一个非常简单的布尔值,并且显示是块我的猜测是它是由于最后三个中的一个,特别是最后一个点.确保所有祖先都可见.