1

我有问题。我想选择一个框架内的元素(不是 iframe)。框架的名称是主要的,但我无法添加 ID(解释起来很复杂,但不可能)。如何操作该框架内的数据?

我已经尝试了各种不同的东西(也来自stackoverflow),但它们没有用......

渡渡鸟

框架集:

<frameset cols="*, 165" frameborder="0" framespacing="0" border="0">
    <frame frameborder="0" marginwidth="5" marginheight="5" border="0" src="game.php" name="main" />
    <frame frameborder="0" scrolling="no" noresize  marginwidth="7" marginheight="0" src="ad_sky.php" name="ad" />
</frameset>

jQuery代码

$(document.createElement("tr"))
        .attr({ id: 'DMbalk' })
        .appendTo($('frame[name=main] #header_info tbody'));

我无法让它以这种方式工作...

game.php 代码(主机)...

<html xmlns="http://www.w3.org/1999/xhtml"><head>
    <title>dododedodonl</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <link rel="stylesheet" type="text/css" href="/style.php?type=static_game&amp;stamm_new_menu&amp;sprites&amp;jquery.tooltip&amp;1279552567">
    <link rel="stylesheet" type="text/css" href="/style.php?type=game&amp;stamm_new_menu&amp;stamm&amp;overview&amp;1279552567">
            <script type="text/javascript" src="/js.php?jquery-1.4.2.min&amp;jquery-cookie&amp;jquery.form&amp;jquery.scrollTo&amp;jquery.tooltip.min&amp;jquery.fadeToggle.min&amp;jquery.blink.min&amp;jquery-ui-core.1.8.min&amp;jquery-ui-draggable.1.8.min&amp;UI&amp;Callback&amp;BBCodes&amp;dialogs&amp;observer&amp;ajax&amp;script&amp;menu&amp;1281000263"></script>
</head><body id="ds_body" marginwidth="5" marginheight="5">
    <div class="top_background"></div>
    <div style="text-align: center;">
        <table class="navi-border" style="width: 840px; border-collapse: collapse; margin:11px auto auto; text-align: left;">
            <tbody><tr>
                <td>
                    <table class="menu nowrap" width="840">
                        <tbody><tr id="menu_row">
                            <td><a href="/game.php?village=152743&amp;screen=&amp;action=logout&amp;h=4c26" target="_top">Uitloggen</a></td>
                            <td><a href="/forum.php" target="_blank">Forum</a></td>
                            <td><a href="/help2.php" target="_blank">Hulp</a></td>
                            <td><a href="/game.php?village=152743&amp;screen=settings">Instellingen</a></td>
                            <td><a href="/game.php?village=152743&amp;screen=premium">Premium</a></td>
                            <td><a href="/game.php?village=152743&amp;screen=ranking">Ranglijst</a> (5602.|162 P)</td>
                                                            <td><a href="/game.php?village=152743&amp;screen=ally">Stam</a></td>
                                                            <td><a href="/game.php?village=152743&amp;screen=report">Berichten</a></td>
                                                            <td><a href="/game.php?village=152743&amp;screen=mail">Mededelingen</a></td>
                                            <td><a href="/game.php?village=152743&amp;screen=buddies">Vrienden</a></td>                            </tr>
                    </tbody></table>
                </td>
            </tr>
        </tbody></table>
    </div>








    <hr width="840" size="2">

    <table id="header_info" align="center" width="840" cellspacing="0" style="padding:0;margin-bottom:4px">
        <tbody><tr>
            <td>
                <table class="navi-border" style="border-collapse: collapse;">
                    <tbody><tr>
                        <td>
                            <table class="menu nowrap" style="width:100%;">
                                <tbody><tr id="menu_row2">
                                    <td><a href="/game.php?village=152743&amp;screen=overview_villages" accesskey="s">Overzichten</a></td>
                                    <td>
                                                                                    <a href="/game.php?village=152743&amp;screen=map">Kaart</a>
                                                                                </td>

                                                <td style="white-space:normal;"><a href="/game.php?village=152743&amp;screen=overview">dododedodonl</a></td><td><b class="nowrap">(484|175) C14</b></td>
                                                                        </tr>
                            </tbody></table>
                        </td>
                    </tr>
                </tbody></table>
            </td>

            <td align="right">
                <table align="right" class="navi-border menu_block_right">
                    <tbody><tr>
                        <td>
                            <table class="box" cellspacing="0" style="empty-cells:show;">
                                <tbody><tr style="height: 20px;">
                                    <td class="icon-box"><a href="/game.php?village=152743&amp;screen=wood" title="Hout"><span class="icon header wood"> </span></a></td>
                                    <td><span id="wood" title="117" class="warn">1229</span>&nbsp;</td>
                                    <td class="icon-box"><a href="/game.php?village=152743&amp;screen=stone" title="Leem"><span class="icon header stone"> </span></a></td>
                                    <td><span id="stone" title="100" class="warn">1229</span>&nbsp;</td>
                                    <td class="icon-box"><a href="/game.php?village=152743&amp;screen=iron" title="IJzer"><span class="icon header iron"> </span></a></td>
                                    <td><span id="iron" title="100" class="warn">1229</span>&nbsp;</td>
                                    <td style="border-left: dotted 1px;"></td>
                                    <td class="icon-box"><a href="/game.php?village=152743&amp;screen=storage" title="Capaciteit opslagplaats"><span class="icon header ressources"> </span></a></td>
                                    <td id="storage">1229</td>
                                </tr>
                            </tbody></table>
                        </td>
                    </tr>
                </tbody></table>
            </td>

            <td align="center">
                <table class="navi-border menu_block_right">
                    <tbody><tr>
                        <td>
                            <table class="box" cellspacing="0" style="margin:0;padding:0;">
                                <tbody><tr style="margin:0;padding:0;">
                                    <td class="icon-box"><a href="/game.php?village=152743&amp;screen=farm"><span class="icon header population"> </span></a></td>
                                    <td align="center" style="margin:0;padding:0;"><span id="pop_current">126</span>/<span id="pop_max">386</span></td>
                                </tr>
                            </tbody></table>
                        </td>
                    </tr>
                </tbody></table>
            </td>



                    </tr>
        <!-- add a TR here -->
    </tbody></table>

    <!-- other html stuff -->
</body></html>

哦,我忘了说,这是一个野生动物园扩展......

4

3 回答 3

1

您也可以选择使用属性:$("frame[name=main]")

于 2010-08-20T19:17:19.190 回答
1

当您的 jQuery 代码如下所示时会发生什么:

$(document.createElement("tr"))
        .attr({ id: 'DMbalk' })
        .appendTo($('#header_info tbody', window.frames[0].document));

jQuery 函数 ($) 的第二个参数是选择运行的上下文,默认情况下是当前文档。指定第二个参数会将选择器的上下文转移到第一帧。

jQuery API 文档

默认情况下,选择器从文档根目录开始在 DOM 中执行搜索。但是,可以通过使用 $() 函数的可选第二个参数为搜索提供替代上下文

这里提出了一个类似的 SO 问题: Run JQuery in the context of another frame

希望这会有所帮助!

编辑: 好的,希望这是答案。我发现 jQuery 是在帧加载之前触发的;结果,我收到一条错误消息,提示找不到框架“main”。所以我在启动脚本中添加了一个 setTimeout(2 秒),我可以看到<tr>正在创建。这是我正在使用的 HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
    <script type="text/javascript">
        setTimeout(AddRow, 2000);

        function AddRow() {
            $(document.createElement("tr"))
                .attr({ id: 'DMbalk' })
                .appendTo($('#header_info tbody', window.frames["main"].document));
        }
    </script>
</head>
    <frameset cols="*, 165" frameborder="0" framespacing="0" border="0">
        <frame frameborder="0" marginwidth="5" marginheight="5" border="0" src="game.htm" name="main" />
        <frame frameborder="0" scrolling="no" noresize  marginwidth="7" marginheight="0" src="test2.htm" name="ad" />
    </frameset>
</html>

框架加载到静态 HTML 文件(我不是 PHP 人,所以我使用静态 HTML)。在我添加setTimeout调用之前,会加载框架,不会<tr>创建新框架,并且会看到 JavaScript 错误。我添加了setTimeout,现在一切正常。我还必须更改引用框架的方式——使用索引似乎不起作用,但按名称引用它可以正常工作。不知道为什么会这样。

所以希望这会有所帮助。如果您仍有问题,请告诉我,我会再试一次。:) 祝你好运!

于 2010-08-21T02:39:40.100 回答
0

如果您只有一帧,请使用索引 0 并将 jquery 放在帧内

window.frames[0].$("#test");
于 2010-08-20T19:23:17.373 回答