且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如果“脚本”标签可以自行删除?

更新时间:2023-12-05 18:54:52

一个例子,自我删除可以方便的是,例如,一些长轮询技术,这将在几分钟后使DOM变得很大。



JavaScript框架添加和删除脚本元素为他们日常生活的一部分。



getScript() jQuery 将脚本标签放在文档头中,并在评估后将其删除。



他们这样做可以保持DOM清洁,否则标签只会建立不必要地。
评估后不再需要它们。



我看到的唯一的缺点是调试 - 例如,Firebug的Firefox似乎丢失了这样的脚本的下落,找不到源代码行。
(撰写本文时)。


We've been having a discussion at our workplace on this with some for and some against the behavior. Wanted to hear views from you guys :

<html>
<body>
<div>
Test!
<script> document.body.removeChild(document.getElementsByTagName('div')[0]); </script>
</div>
</body>
</html>

Should the above script work and do what it's supposed to do? First, let's see what's happening here :

I have a javascript that's inside the <div> element. This javascript will delete the child node within body which happens to hold the div inside which the script itself exists.

Now, the above script works fine in Firefox, Opera and IE8. But IE6 and IE7 give an alert saying they cannot open the page.

Let's not debate on how IE should have handled this (they've accepted it as a bug and hence fixed it in IE8). The point here is since the 'SCRIPT' tag itself is a part of DOM, should it be allowed to do something like this? Should it even exist after such an operation?

Edit:

Firefox, Opera, IE9 etc. do not remove the 'script' tag if I run the above code. But, document.getElementsByTagName('script').length returns 0!

To understand what I mean, add alert(document.getElementsByTagName('script').length); before and after document.body.removeChild(document.getElementsByTagName('div')[0]); in the code above.

An example where self removal can be handy is, for example, some long polling techniques that would certainly make the DOM large after a few minutes.

JavaScript frameworks add and remove script elements as part of their daily routine.

E.g. getScript() in jQuery places a script tag in the document head and removes it right after evaluation.

They do this to keep the DOM clean - else the tags would just build up unnecessarily. They are no longer needed after evaluation.

The only drawback I see with this is debugging - for example, Firefox with Firebug seems to be lost as to the whereabouts of such scripts and cannot find the source lines. (As of this writing.)