0

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

我们正在谈论的 HTML 看起来像这样(例如简化):

<div id="uxReportViewer">
    <iframe id="ReportFrame_uxReportViewer">
        <html>
            <frameset id="frameset">
                <frame name="docmap" id="docmap" />
                <frame name="report" id="report">
                    <html>
                        <body class="r0">
                            <div id="oReportDiv">
                                <table>
                                    <tbody>
                                        <tr>
                                            <td id="oReportCell" /> <!-- Goal -->
                                        </tr>
                                    </tbody>
                                </table>
                            </div>
                        </body>
                    </html>
                </frame>
            </frameset>
        </html>
    </iframe>
    <iframe id="PrintFrame_uxReportViewer" />
</div>

<td id="oReportCell" />是我需要抓住的元素。

这目前在 IE 中有效:

$('div#oReportDiv > table > tbody > tr > td#oReportCell',
    $('#uxReportViewer > iframe:eq(0)')
        .contents()
        .find('html')[0]
        .document
        .frames["report"]
        .document
);

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

$('#uxReportViewer > iframe:eq(0)')
    .contents()
    .find('html')[0] // good through here
    .document;       // document is not defined

而不是.document在 FF 中,有一个ownerDocument和一个parentNode属性是 HTMLDocument 类型,但是我在文档中找不到框架。

有任何想法吗?

谢谢!

4

3 回答 3

0

编辑:好的,不知道。对于它的价值,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!

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

于 2011-03-06T21:48:20.803 回答
0

我用头撞了一会儿,发现这在 IE8 和 FF3.6 中都有效:

$('#oReportCell', 
    $('#uxReportViewer > iframe:eq(0)')
        .contents()
        .find('html')
        .contents()
        .find('frame[name=report]')[0]
        .contentWindow // supported by modern browsers
        .document
);

它不漂亮,但有效。

于 2011-03-06T22:10:24.000 回答
0

我正在 Chrome 中进行测试。

当使用您的确切 HTML 代码时,IFRAME 的内容只是一个空的 HEAD 和一个空的 BODY。我无法获取 FRAME。

这:

$('#uxReportViewer iframe:first').contents().find('html')[0].innerHTML

将返回:

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

见这里:http: //jsfiddle.net/simevidas/REdeN/

于 2011-03-06T22:20:51.173 回答