我遇到了问题。 我想在框架内选择一个元素(而不是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&stamm_new_menu&sprites&jquery.tooltip&1279552567">
<link rel="stylesheet" type="text/css" href="/style.php?type=game&stamm_new_menu&stamm&overview&1279552567">
<script type="text/javascript" src="/js.php?jquery-1.4.2.min&jquery-cookie&jquery.form&jquery.scrollTo&jquery.tooltip.min&jquery.fadeToggle.min&jquery.blink.min&jquery-ui-core.1.8.min&jquery-ui-draggable.1.8.min&UI&Callback&BBCodes&dialogs&observer&ajax&script&menu&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&screen=&action=logout&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&screen=settings">Instellingen</a></td>
<td><a href="/game.php?village=152743&screen=premium">Premium</a></td>
<td><a href="/game.php?village=152743&screen=ranking">Ranglijst</a> (5602.|162 P)</td>
<td><a href="/game.php?village=152743&screen=ally">Stam</a></td>
<td><a href="/game.php?village=152743&screen=report">Berichten</a></td>
<td><a href="/game.php?village=152743&screen=mail">Mededelingen</a></td>
<td><a href="/game.php?village=152743&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&screen=overview_villages" accesskey="s">Overzichten</a></td>
<td>
<a href="/game.php?village=152743&screen=map">Kaart</a>
</td>
<td style="white-space:normal;"><a href="/game.php?village=152743&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&screen=wood" title="Hout"><span class="icon header wood"> </span></a></td>
<td><span id="wood" title="117" class="warn">1229</span> </td>
<td class="icon-box"><a href="/game.php?village=152743&screen=stone" title="Leem"><span class="icon header stone"> </span></a></td>
<td><span id="stone" title="100" class="warn">1229</span> </td>
<td class="icon-box"><a href="/game.php?village=152743&screen=iron" title="IJzer"><span class="icon header iron"> </span></a></td>
<td><span id="iron" title="100" class="warn">1229</span> </td>
<td style="border-left: dotted 1px;"></td>
<td class="icon-box"><a href="/game.php?village=152743&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&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>
噢,我忘了说,这是一个野生动物园扩展...
答案 0 :(得分:1)
您也可以选择使用属性:$("frame[name=main]")
答案 1 :(得分:1)
当您的jQuery代码如下所示时会发生什么:
$(document.createElement("tr"))
.attr({ id: 'DMbalk' })
.appendTo($('#header_info tbody', window.frames[0].document));
jQuery函数($)的第二个参数是选择运行的上下文,默认情况下是当前文档。指定第二个参数会将选择器的上下文移到第一帧。
jQuery API docs:
默认情况下,选择器会执行它们的操作 从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
,现在一切正常。我还必须改变我引用框架的方式 - 使用索引似乎不起作用,但是通过名称引用它可以正常工作。不知道为什么会这样。
所以希望这会有所帮助。如果您仍有问题,请告诉我,我会再试一次。祝你好运!
答案 2 :(得分:0)
如果只有一个帧,请使用索引0并将jquery放在frame
中window.frames[0].$("#test");