code1:test1.html
<link rel="stylesheet" href="/web/newversion/css/dzq-style.css" type="text/css">
<script type="text/javascript" src="/web/newversion/test.js"></script>
<title>图片浏览</title>
<script type="text/javascript">
$(document).ready(function(){
Test.init();
$("#click_me").click(function(){
alert(1)
})
})
</script>
然后在test2.html中通过ajax将test1.html的内容加载过来然后append到div中,发现js没有被append到div中。通过查看jquery源码发现jquery将执行后的js直接移除掉了。
jquery.1.7.js代码:
function evalScript( i, elem ) {
if ( elem.src ) {
//通过ajax方式来执行js
jQuery.ajax({
url: elem.src,
async: false,
dataType: "script"
});
} else {
jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
}
if ( elem.parentNode ) {
//移除掉js
//elem.parentNode.removeChild( elem );
}
}
如果想取jquery动态加载的html中的script时,还需要修改jqueryr的clean函数的代码
if ( fragment ) {
checkScriptType = function( elem ) {
return !elem.type || rscriptType.test( elem.type );
};
for ( i = 0; ret[i]; i++ ) {
if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
} else {
if ( ret[i].nodeType === 1 ) {
var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType );
ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
}
//移动外面,特殊情况,特殊处理。
//fragment.appendChild( ret[i] );
}
fragment.appendChild( ret[i] );
}
}