使用jQuery将非标准标记添加到DOM

时间:2010-11-02 20:43:01

标签: jquery html facebook jquery-ui dom

我正在尝试将标记放入JQuery-ui对话框小部件中。由于一些其他问题,我需要从服务器加载它作为ajax调用。

返回的是:

    <div id="ajax-body">
    give gift
 <fb:serverFbml width="650px">

  <script type="text/fbml">
  <center>
      <fb:request-form action="${shareGiftUrl}" type="Podíl na Zlaté soše" method="POST"
        content="Daroval jsem ti cuhlu" invite="false">
            <fb:multi-friend-selector cols="4" rows="3" 
             showborder="false" max="1" 
             actiontext="Vyber přítele, kterému chceš darovat podíl a klikni na              'Posílat mi žádosti typu Podíl na Zlaté soše'" 
             email_invite="false" bypass="cancel" import_external_friends="false" 
             exclude_ids="${excludeIds}" />
     </fb:request-form> 
     </center>
     </script>
     </fb:serverFbml>
    </div>

如果我把这个放入div准备对话,如$(div).html(数据):

    function loadAjax(url, title) {
 $.get(url,
   function(data) {
    $("#ajaxModal").html(data);
    $("#ajaxModal").show();
    $("#ajaxModal").dialog( {
     modal : true,
     title : title,
     width : 680,
     height : 500,
     close : function(event, ui) {
      $("#ajaxModal").dialog("destroy");
      $("#ajaxModal").html("");
     }
    });
   });
}

它无法正常工作,标签不在模态对话框的标签中。

脚本标记是body标记的最后一个子标记 - 因此是ui-dialog div的兄弟

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

问题是,jQuery处理sript标签的方式与其他标签不同。如果它在作为html函数的参数传递的结构中填充它,它将它取出并在其上运行eval然后将它放在文档的末尾。

解决这个问题的方法是将脚本标记放入vira normal JavaSript

结构中
var script = document.createElement('script');
script.type = 'text/fbml';
script.text = scripttext;

然后可以像

一样添加
$("#ajaxModal").append(script);

我正在使用regexp从ajax响应中提取脚本