Javascript 如何复制包含<;的元素;脚本>;来自AJAX加载文档的子级?

Javascript 如何复制包含<;的元素;脚本>;来自AJAX加载文档的子级?,javascript,jquery,Javascript,Jquery,我目前正在尝试在不更改页面模板的情况下,将一种原地编辑功能破解到中。因此,在一个问题的详细信息页面上,我将dblclick事件附加到字段中,这些字段用可编辑的表单元素替换静态字段(来自编辑页面,该页面在脚本开始时已加载并缓存了ajax)。其中一些元素是JS小部件,例如日历小部件,并且它们在for字段中包含元素。我希望将这些元素与HTML的其余部分结合起来,并在页面中执行它们 因此,原始静态字段如下所示: <td bgcolor="#ffffff" width="80%"> 2008/

我目前正在尝试在不更改页面模板的情况下,将一种原地编辑功能破解到中。因此,在一个问题的详细信息页面上,我将dblclick事件附加到字段中,这些字段用可编辑的表单元素替换静态字段(来自编辑页面,该页面在脚本开始时已加载并缓存了ajax)。其中一些元素是JS小部件,例如日历小部件,并且它们在for字段中包含元素。我希望将这些元素与HTML的其余部分结合起来,并在页面中执行它们

因此,原始静态字段如下所示:

<td bgcolor="#ffffff" width="80%"> 2008/Sep/22 </td>
<td class="fieldValueArea">

<input type="text" name="duedate" id="duedate" value="" size="10">
    <img id="duedate_trigger_c" src="/jira/images/icons/cal.gif" width="16" height="16" border="0" alt="Select a date" title="Select a date">

<script type="text/javascript">
    Calendar.setup({
        firstDay    : 0,              // first day of the week
        inputField  : "duedate",  // id of the input field
        button      : "duedate_trigger_c", // trigger for the calendar (button ID)
        align       : "Tl",           // alignment (defaults to "Bl")
        singleClick : true,
        ifFormat    : "%e/%b/%y"      // our date only format
    });
</script>

</td>
这样替换字段:

this.innerHTML = $("#"+fieldname+"FieldArea .fieldValueArea",jeip_editpage).html();
(其中=字段TD)

在$.get()之后,jeip_editpage将元素包含在正确的位置,但是当我尝试像上面那样抓取元素时,它就消失了。我在谷歌上搜索了一下,发现jQuery在解析阶段会在页面中移动元素,这是一个很痛苦的过程。我想我可以在$.get()之后对文本进行搜索、抓取和替换,以确保所有元素都是分开的,但我认为必须有一种更简单的方法,对吗

请注意我没有更改JIRA的任何页面模板,因此涉及以更有用的布局返回的HTML的答案不会对我起作用。

jQuery Ajax“$.load”API允许在URL之后包含选择器(类似于URL参数的“内部”)。这样,它将在返回的内容中查找您在选择器中指定的内容。因此,您可以直接将以下内容加载到表格单元格中:

$(this).load(editLink + ' #' + fieldname + 'FieldArea .fieldValueArea *';

“this”指针将是您要更新的“td”。我不是100%肯定,但是,选择器将工作;然而,可能是这样。(我试图表达的是在响应HTML中选择“td”,然后获取其内容。)

脚本从jQuery ajax请求中剥离。这是源代码

58 // inject the contents of the document in, removing the scripts 59 // to avoid any 'Permission Denied' errors in IE 60 .append(res.responseText.replace(rscript, "")) 58//在中插入文档内容,删除脚本 59//避免IE中出现任何“权限被拒绝”错误 60.追加(res.responseText.replace(rscript,“”) 资料来源:


您仍然可以编写自己的ajax函数来获取html(使用脚本),然后让jQuery插入它

您不需要通过ajax传入日历脚本。Ajax具有日历功能:

function SetupCal(string fieldSelector, string buttonSelector){
 Calendar.setup({
    firstDay    : 0,              // first day of the week
    inputField  : fieldSelector,  // id of the input field
    button      : buttonSelector, // trigger for the calendar (button ID)
    align       : "Tl",           // alignment (defaults to "Bl")
    singleClick : true,
    ifFormat    : "%e/%b/%y"      // our date only format
  });
}
然后在页面加载中: $(函数(){ $.get(编辑链接,函数(数据){ jeip_editpage=数据; }“文本”)

}))

因此,静态字段中的代码来自:

<td bgcolor="#ffffff" width="80%"> 2008/Sep/22 </td>
2008/9/22
致:


您应该能够执行以下操作:

success: function(data) {
    $(content).html(data); // this should evaluate the data from an ajax call
                           // when injected...
},
format: "text"
基本上,在使用数据设置html时,jquery会在全局上下文中评估该数据。只是不要告诉jquery数据是html/json/etc,而只是文本

我唯一遇到的问题是google chrome/safari不接受数据中的标签。然而,这是jquery 1.2.6,所以我不知道这是否已修复,我只是不再这么做:)

我是否遗漏了阻止上述行为的问题


编辑:看起来您在ajax响应中发送了td。Jquery在尝试注入内容时会做一些奇怪的事情。用表标记包装td,然后通过执行
$(…).html($(data.find(“>tr”))选择td

可能,尽管我承认我对自己所做的事情并不完全准确;$.get()不会发生在双击时,而是发生在脚本的开头,因此它可以缓存编辑页面并将其用于多个字段。(很抱歉,我将编辑原始问题。)“$.load”在内部调用“$.ajax”后剥离脚本。您应该自己调用“$.ajax”来加载所需的片段。
<td bgcolor="#ffffff" width="80%"> 2008/Sep/22 </td>
<td class="fieldValueArea">

  <input type="text" name="duedate" id="duedate" value="" size="10">
  <img id="duedate_trigger_c" src="/jira/images/icons/cal.gif" width="16" height="16" border="0" alt="Select a date" title="Select a date">


</td>
success: function(data) {
    $(content).html(data); // this should evaluate the data from an ajax call
                           // when injected...
},
format: "text"