目前在解决一个前台问题时,遇到了如下情况 :
点击前台一个按钮,会触发一个ajax请求,从后台获取一段页面代码,放置在当前页面的一个 <div> 中备用,这部分调用的是 $('#divID').html($responseHtml) 来实现的,但是在返回的代码片段中,一段javascript部分却被无情的过滤掉了......不解,但是这段javascript代码是另一个功能必须的,怎么办? 最后通过原始的方法解决了 (填充部分) :
var ele = document.getElementById('divID');
ele.innerHTML = $responseHtml;
从后台获取代码的ajax请求部分不用改变,填充部分用 innerHTML 即可!! 但此处需要注意,我们获取页面div部分也必须使用 document.getElementById 不能使用jquery提供的选择器方式。
##################################################
!!!!!!错误纠正!!!!!!
##################################################
经过后期的比较,上述想法是存在问题的!!!! jquery(1.7 版本)提供的 html() 或者 append() 方法,虽然会将我们返回的html代码段中的javascript给过滤掉(表现就是通过firebug你无法找到定义的js片段),但是这些js代码是被执行过的!你在其中直接定义的js function,最后都是以对象的形式存在于 window 对象中!!这些js片段虽然不可见,但是你在后续动作中是可以直接调用的!!!但是,如果通过原生态的方法(上述的 innerHTML 方式) 将返回的 html 代码段嵌入的目标<div>中,虽然,你定义的js段是可以看见的,但是这些js不会被执行,也就是,你在其中定义的 js 函数只是以文本形式插入到当前页面中,并没有以对象的形式存放与 window 中,这些js函数,在页面后续的动作中是无法调用的!!!
综上,对于这种情况,我们还是直接使用 jquery提供的html()/append() api 即可!!!!