2010-08-20 190 views
1

我遇到了問題。 我想選擇一個框架內的元素(不是iframe)。 框架的名稱是主要的,但我不能添加一個ID(複雜的解釋,但不可能)。我如何操作該框架內的數據?框架內的jQuery訪問表

我已經嘗試過各種不同的東西(也計算器),但他們沒有工作......

渡渡鳥

框架:

<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> 

噢,我忘了說,這是一個Safari瀏覽器插件...

+3

你到目前爲止嘗試過什麼?也發佈您的HTML標記了。 – Sarfraz 2010-08-20 19:13:13

+0

是的,如果你可以提供一個html樣本,所以我們可以看到你在用什麼,這會有所幫助。 – 2010-08-20 19:16:04

+0

只是一個基本的框架...沒有什麼不尋常的...我嘗試的東西是:$('#divId',top.frames ['main']); $('#divId',top.frames ['main']。content); $('#divId',window.main.content); – dododedodonl 2010-08-20 19:26:49

回答

1

會發生什麼事時,你的jQuery代碼看起來是這樣的:

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

的第二個參數jQuery函數($)是其中選擇運行,在默認情況下是當前文檔的上下文。指定第二個參數將選擇器的上下文移動到第一幀。

jQuery的API docs

默認情況下,選擇在DOM內履行 搜索開始 文檔根。 Run JQuery in the context of another frame

希望這有助於:但是, 備用上下文可以通過使用可選的第二個參數 向$()函數

類似的SO問題被要求在這裏被賦予了 搜索!

編輯: 好的,希望這是答案。我發現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,現在工作正常。我也必須改變我如何引用框架 - 使用索引似乎沒有工作,但通過名稱引用它工作正常。不知道爲什麼。

所以希望這有助於。如果您仍然遇到問題,請告訴我,我會再試一次。 :) 祝你好運!

+0

我不知道它爲什麼不能正常工作...我嘗試了你說的東西,嘗試過它的變體......但是這一切都不起作用...不能得到它... 有一個ID爲'header_info'的表,並在這個表的tablebody,我必須添加一個新的 ...但它只是不不工作... – dododedodonl 2010-08-21 08:53:17

+0

你有訪問框架頁面本身嗎?如果是這樣,你可以運行你的jQuery選擇器來驗證它的工作原理嗎?如果沒有,你可以發佈幀的結構,以便我可以幫助調試嗎? – 2010-08-21 12:39:22

+0

這是很多的HTML,但是,看到的問題... – dododedodonl 2010-08-21 13:49:06

1

您可以選擇使用屬性,以及:$("frame[name=main]")

+0

不適用於我... – dododedodonl 2010-08-20 21:36:23

0

如果你只有一幀,使用索引0,並把裏面的jQuery框架

window.frames[0].$("#test"); 
+0

也不適用於我... – dododedodonl 2010-08-20 21:37:02