【发布时间】:2010-08-25 12:04:06
【问题描述】:
我有一个 JQuery(使用 JQuery 1.4.2)问题,该问题仅在标准模式下的 IE8 中出现,在一个特定的 DOM 元素上而不是在其他几乎相同的 dom ellements 上。为什么它没有意义的最好例子如下:
$('span.error:visible')[0].style.display
上面的代码返回“none”,除非我有某种脑动脉瘤,否则在 JQuery 或 IE8 中没有错误是不可能的。这只发生在标准模式下的 IE8 中,不会发生在任何其他浏览器或 IE8 兼容模式下。它找到的跨度实际上是一个 ASP.net 验证控件,所以如果控制它呈现给浏览器的内容,我只有有限的数量。当我使用 IE8 开发人员工具栏检查 DOM 并从 DOM 复制 HTML 时,它给了我以下信息:
<SPAN style="DISPLAY: none; COLOR: red"
id=ctl00_cphContentBody_mnMainMiddleNames_ebvMiddleName1 class=error
controltovalidate="ctl00_cphContentBody_mnMainMiddleNames_txtMiddleName0"
errormessage="JQuery should not find this" display="Dynamic" validationGroup="MiddleNames"
isvalid="true" validationexpression="[A-Za-z][A-Za-z '\-]*[A-Za-z]*">JQuery should not
find this</SPAN>
如果我只是查看源代码并复制并粘贴它,我会得到以下结果:
<span id="ctl00_cphContentBody_mnMainMiddleNames_ebvMiddleName1" class="error"
style="color:Red;display:none;">JQuery should not find this</span>
如果我创建一个简单的 HTML 文件,其中只包含上述 HTML 的任何一个,那么 $('span.error:visible') 找不到跨度,我无法发布代码来重现此问题。但是在实际的 asp.net 页面中,如果我运行 $('span.error:visible')[0].style.display 它会返回“none”,如果我运行 $('span.error:visible').text() 它会返回“JQuery 不应该
找到这个”。
tl;dr $('span.error:visible')[0].style.display 如何返回“无”。
编辑以回答尼克斯的评论。
$('span.error:visible')[0].offsetWidth 返回 3
$('span.error:visible')[0].offsetHeight 返回 22
令人费解的是,我在 Jquery 网站上找到了以下内容。
在 jQuery 1.3.2 中,一个元素是可见的 如果其浏览器报告的 offsetWidth 或 offsetHeight 大于 0。
该元素是不可见的,但根据上面的 JQuery 认为是。
这种变化意味着什么?它的意思是 如果你的元素的 CSS 显示是 “无”,或其任何父/祖先 元素的显示为“无”,或者如果 元素的宽度为 0 并且元素的 高度为 0 则元素将是 报告为隐藏。
所以上面的说法是错误的。显示为“无”,但 offsetWidth 和 offsetHeight 不为零。
【问题讨论】:
-
$('span.error:visible')[0].offsetWidth和$('span.error:visible')[0].offsetHeight给你什么? -
每次都会出现这种情况?还是间歇性的?
标签: asp.net jquery dom internet-explorer-8