jquery的html,append函数会将传入的参数中的js过滤

来源:互联网 发布:ipv6网络电视直播 编辑:程序博客网 时间:2024/05/17 22:01
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方式来执行jsjQuery.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] );}}


0 0
原创粉丝点击