// 第一步:匹配加载的页面中是否含有js var regDetectJs = /<script(.|\n)*?>(.|\n|\r\n)*?<\/script>/ig; var jsContained = ajaxLoadedData.match(regDetectJs); //ajaxLoadedData为ajax获取到的数据 // 第二步:如果包含js,则一段一段的取出js再加载执行 if(jsContained) { // 分段取出js正则 var regGetJS = /<script(.|\n)*?>((.|\n|\r\n)*)?<\/script>/im; // 按顺序分段执行js var jsNums = jsContained.length; for (var i=0; i<jsNums; i++) { var jsSection = jsContained[i].match(regGetJS); if(jsSection[2]) { if(window.execScript) { // 给IE的特殊待遇 window.execScript(jsSection[2]); } else { // 给其他大部分浏览器用的 window.eval(jsSection[2]); } } } }
Ajax动态加载的html页面不能执行其中的js代码
利用jQuery的load或者ajax的方法,能够轻松实现前端的无刷新载入页面。详见:Ajax+History实现局部刷新页面,局部载入页面。但是,如果被载入页面有js的话,会发现js无法执行。下面的代码通过正则匹配被载入页面内容中的js代码,然后通过js的eval函数,执行下,即可解决这个问题: