试图让这个jQuery选择器在FF中工作,目前只在IE中工作;关于ReportViewer 2008

试图让这个jQuery选择器在FF中工作,目前只在IE中工作;关于ReportViewer 2008,jquery,html,dom,cross-browser,reportviewer2008,Jquery,Html,Dom,Cross Browser,Reportviewer2008,ReportViewer 2008 web控件发出令人讨厌的HTML DOM结构。我试图深入到HTML中的某个元素,目前只能让我的jQuery选择器在IE中工作。我希望有人能帮我完成最后一部分 我们正在讨论的HTML如下所示(例如简化): 但在FF中,我只能做到这一点,甚至不能进入我指定的范围: $('#uxReportViewer > iframe:eq(0)') .contents() .find('html')[0] // good through here

ReportViewer 2008 web控件发出令人讨厌的HTML DOM结构。我试图深入到HTML中的某个元素,目前只能让我的jQuery选择器在IE中工作。我希望有人能帮我完成最后一部分

我们正在讨论的HTML如下所示(例如简化):

但在FF中,我只能做到这一点,甚至不能进入我指定的范围:

$('#uxReportViewer > iframe:eq(0)')
    .contents()
    .find('html')[0] // good through here
    .document;       // document is not defined
FF中没有
.document
,而是有一个
ownerDocument
和一个
parentNode
属性,它们是HTMLDocument类型,但是我在文档中找不到框架

有什么想法吗


谢谢

编辑:好的,我不知道。值得一提的是,HTML Tidy认为HTML并不完全有效:

HTML Tidy Parsing ...
line 19 column 9 - Warning: discarding unexpected <html>
line 18 column 5 - Warning: missing </iframe> before <frameset>
line 17 column 1 - Warning: missing </div> before <frameset>
line 20 column 13 - Warning: <frameset> isn't allowed in <body> elements
line 10 column 1 - Info: <body> previously mentioned
line 21 column 17 - Warning: <frame> isn't allowed in <body> elements
line 10 column 1 - Info: <body> previously mentioned
line 3 column 1 - Warning: inserting missing 'title' element
line 4 column 3 - Warning: <style> inserting "type" attribute
line 7 column 3 - Warning: <script> inserting "type" attribute
Info: Document content looks like HTML Proprietary
8 warnings, 0 errors were found!
HTML语法分析。。。
第19行第9列-警告:放弃意外
第18行第5列-警告:之前缺少
第17行第1列-警告:之前缺少
第20行第13列-警告:元素中不允许
第10行第1列-信息:前面提到
第21行第17列-警告:元素中不允许
第10行第1列-信息:前面提到
第3行第1列-警告:插入缺少的“title”元素
第4行第3列-警告:插入“类型”属性
第7行第3列-警告:插入“类型”属性
信息:文档内容看起来像HTML专有
8个警告,发现0个错误!

也许jQuery并不是为在这种情况下工作而设计的。

我花了一段时间与之抗争,发现它在IE8和FF3.6中都能工作:

$('#oReportCell', 
    $('#uxReportViewer > iframe:eq(0)')
        .contents()
        .find('html')
        .contents()
        .find('frame[name=report]')[0]
        .contentWindow // supported by modern browsers
        .document
);
它不漂亮,但很有效。

我正在用Chrome进行测试

当使用完全相同的HTML代码时,IFRAME的内容只是一个空头和一个空体。我拿不到相框

这:

将返回:

<head></head><body></body>


请参见此处:

您可以将此
'div#oReportDiv>表>tbody>tr>td#oReportCell'
替换为以下内容:
“#oReportCell'
@Šime Vidas:是的,谢谢。我明确列出了测试的元素。问题是我在FF的框架集中的“报告”框架中找不到HTML文档,只在IE中找到。是的,谢谢。我明确列出了测试的元素。问题是我无法在FF中的框架集中的“report”框架中找到HTML文档,甚至无法搜索#oReportCell(即,
$(“#oReportCell”)。长度
==0)。对于嵌套的HTML文档,仅仅搜索该元素是不够的。作为对您的编辑的回应:是的,这就是为什么这么有趣!我想我真的找到了解决办法。我发布了答案。我主要关心的是IE。该网站的报告部分仅限于管理员,将由拥有IE的用户使用。将其发布到Firefox对我来说只是一个挑战。你有没有什么见解,我可以改变,使其铬友好?我没有安装它进行测试。你确定它在FF 3.6中工作吗?它在我的代码中不起作用:我认为它在JSFIDLE中不起作用,因为我提供的代码摘录不包含任何实际内容。它在我的实际应用程序中确实有效。
$('#oReportCell', 
    $('#uxReportViewer > iframe:eq(0)')
        .contents()
        .find('html')
        .contents()
        .find('frame[name=report]')[0]
        .contentWindow // supported by modern browsers
        .document
);
$('#uxReportViewer iframe:first').contents().find('html')[0].innerHTML
<head></head><body></body>