为什么';t$(';body';).html(";)清除调用它的javascript吗?
这是一段代码,链接到一个javascript文件,该文件生成了一些虚假推文,以及一些试图向自己解释发生了什么的自制评论。我想知道为什么';t$(';body';).html(";)清除调用它的javascript吗?,javascript,jquery,html,function,Javascript,Jquery,Html,Function,这是一段代码,链接到一个javascript文件,该文件生成了一些虚假推文,以及一些试图向自己解释发生了什么的自制评论。我想知道$body.html(“”)的目的是什么是。它似乎只是清除了主体的内容,主体已经是空的,除了存在的javascript。这不也会清除体内的实际脚本吗?i、 例如,当我们到达那一行时,为什么整个脚本不消失呢。我猜函数是在主体被清除之前完整执行的?我想,只是想对函数执行有一点启发 <!DOCTYPE html> <html> <head>
$body.html(“”)的目的是什么代码>是。它似乎只是清除了主体的内容,主体已经是空的,除了存在的javascript。这不也会清除体内的实际脚本吗?i、 例如,当我们到达那一行时,为什么整个脚本不消失呢。我猜函数是在主体被清除之前完整执行的?我想,只是想对函数执行有一点启发
<!DOCTYPE html>
<html>
<head>
<script src="jquery.js"></script>
<script src="data_generator.js"></script>
</head>
<body>
<script>
$(document).ready(function(){ // calls function only after dom is loaded
var $body = $('body'); // selects html body tag, stores in $body
$body.html(''); // clears body?
var index = streams.home.length - 1; // sets index to length of streams array
while(index >= 0){
var tweet = streams.home[index]; // gets a tweet string
var $tweet = $('<div></div>'); // $tweet is a div element
$tweet.text('@' + tweet.user + ': ' + tweet.message); // add formatted tweet to div
$tweet.appendTo($body); // add tweet to body
index -= 1; // rinse, repeat
}
});
</script>
</body>
</html>
$(document).ready(function(){//仅在加载dom后调用函数
var$body=$('body');//选择html body标记,存储在$body中
$body.html(“”);//是否清除正文?
var index=streams.home.length-1;//将索引设置为streams数组的长度
而(索引>=0){
var tweet=streams.home[index];//获取一个tweet字符串
var$tweet=$('');//$tweet是一个div元素
$tweet.text(“@”+tweet.user+”:“+tweet.message);//将格式化的tweet添加到div
$tweet.appendTo($body);//将tweet添加到body
索引-=1;//冲洗,重复
}
});
编辑:要清楚,我没有写代码,只有注释。我只是想把它分解并理解每一行。当Javascript运行时,函数上下文存储在内存中,关闭变量存储在上下文中。它们不会消失。全局变量附加到窗口
。它们也不会消失。我认为将脚本附加到标题(所有其他脚本所在的位置)比附加到正文更好。
如果要完全消除正在调用的脚本,可以使用:
<script>
(function foo(){
var b=function moo(){
var c=document.getElementsByTagName('script');
alert(document.body.innerHTML);
c[0].parentElement.removeChild(c[0]);
alert(document.body.innerHTML);
}
var a=setTimeout(b,1000);
b=null;
})();
foo=null;
</script>
(函数foo(){
var b=函数moo(){
var c=document.getElementsByTagName('script');
警报(document.body.innerHTML);
c[0].parentElement.removeChild(c[0]);
警报(document.body.innerHTML);
}
var a=设置超时(b,1000);
b=零;
})();
foo=null;
请记住,这将完全删除脚本的任何功能以及DOM中对它的任何引用
基本上,因为脚本已经加载,所以不能从DOM
中删除它
现在它已经加载了,真的有什么理由去掉它吗…?因为它已经加载到内存中了。HTML中的脚本元素应该消失,但是脚本加载到内存中,修改HTML后不会将其从内存中删除。谢谢@PatrickEvans。包含该行的目的只是为了清除脚本吗?这是一种常见的做法吗?我认为在发布推特之前,只需确保身体没有受到过量元素的污染,但这只是一个猜测。虽然如果他们只是将其作为外部js文件包含并将脚本标记放在头部,他们就不需要清除正文。好的,谢谢!我想可能是这样的。我想他们只是为了简单起见把它放在html文件中,但我明白你的意思。谢谢。我不是想消除脚本,我只是想知道为什么它没有通过代码消除。我只是不明白这行的目的,$body.html(“”);是的,这是一个记忆问题。您的浏览器已经下载了脚本,因此尽管您试图从HTML
中清空脚本,它仍然可以调用。