3
该评估JavaScript是让我疯了......的jQuery在HTML字符串并发症
我所要做的是更新一个网页的一部分,并为理由不值得说明的是,该请求是要求一整个新的HTML页面(包括它的头部),然后只提取指定元素中包含的HTML(由ID标识)。
我本来每当新的HTML AJAX请求完成后,将运行下面的JavaScript代码:
var $newContent = $(newHtmlContent);
loadingElement.innerHTML = $("#" + loadingElementId, $newContent).html();
这是伟大的,直到我有一些HTML已加载的是,包含在指定范围内元素,包含了需要运行一些脚本,所以我改成了这样:
var $newContent = $(newHtmlContent);
$(loadingElement).html($("#" + loadingElementId, $newContent).html());
我已阅读,jQuery将评估与HTML()函数的HTML字符串参数的脚本 - 但是,似乎问题是脚本是条纹的在此通话之前编辑。 有过通过萤火看看下面似乎是发生了什么:
$(newHtmlContent) // includes all 'script' elements
$("#" + loadingElementId, $newContent) // has no scripts
$("script", $newContent) // empty jQuery object
有没有人有什么建议? 在此先感谢。
的利息,可以是一个事实,即jQuery的“$ .load()”调用,它提供了正是你想要的功能在这里实现,当你以这种方式使用它时,也不会执行嵌入的'
编辑没关系;我想你在这里沉没了。只要您将内容移交给jQuery,我很确定您的脚本已被删除。如果“newContent”实际上是“native”页面的一部分,但是由于它在jQuery实例化的那个片段中,那么下面的东西技巧将会工作,这太迟了。
我 认为这会工作,但我承认我还没有加载的文件,就像你得到了什么尝试过:的想法是绕过jQuery的拉出时加载部分的内容。来源
2011-04-18 16:40:46 Pointy
'$(“#”+ loadingElementId,$ newContent)'简单地执行'$ newContent.find'我仍然坚持如何去除脚本。 – 2011-04-18 16:50:35
我也很困惑;我不知道*做什么,或者为什么。我一直在玩jsfiddle,我只是越来越混乱... – Pointy 2011-04-18 16:52:58
同样在这里。我发布了我的发现。 – 2011-04-18 17:24:01
你可以尝试的一件事是将包含的
<script>
元素和eval()
这些元素或将它们追加到页面的head
中。来源
2011-04-18 16:47:51 cdeszaq
有这个问题很长的解释在这里:http://forum.jquery.com/topic/jquery-removing-script-tags-from-html-string-when-using-html
从这个讨论:
因此,看起来问题在于您试图将元素从返回的HTML中提取出来,而无需先将其插入到DOM中。两种可能的解决方案:
将整个返回的HTML插入到DOM中。脚本标签将执行。然后移除你不需要的部分。这并不理想,因为它可能会显示您不想要的内容,除非您先隐藏
loadingElement
并在完成后显示。从
$(newHtmlContent)
拉出脚本网址,使用$.getScript()
检索并执行每个URL,然后添加检索元素融入DOM。这更加痛苦,但它应该正常工作,并且不必将不必要的内容插入到DOM中。来源
2011-04-18 16:52:36 nrabinowitz
我猜在这里很好,但怎么样:
来源
2011-04-18 16:53:32