我就是搞不懂逻辑,也许我想得太多了!
在将脚本的id属性附加到DOM之前,我需要确保它是唯一的。
这里有一些例子向您展示我所需要的:
如果在<head>元素中有3个子script元素,如下所示:
<script id="script-0"></script>
<script id="script-1"></script>
<script id="script-2"></script>我希望我的新script元素有一个id of "script-3"
如果我有3个子script元素,比如:
<script id="script-0"></script>
<script id="script-2"></script>
<script id="script-3"></script>我希望我的新script元素有一个id of "script-1"或"script-4"
在这种情况下:
<script id="script-1"></script>
<script id="script-2"></script>我希望我的新script元素有一个id of "script-0"或"script-3"
只要每个脚本元素的id 属性都是唯一的!
在这个场景中,每个script元素实际上都在执行JSONP请求,因此,由于它是异步的,所以在过渡期间可能会将另一个script元素添加到DOM中,并且需要它自己的唯一id。
在JSONP请求收到响应后,它将从DOM中删除,因此在id中出现了空白,例如script-0、script-1、script-3、script-4和script-6,因为JSONP请求script-2和script-5可能已经收到响应并从DOM中删除。在这种情况下,我希望一个新的script元素具有id script-2、d44或最坏的情况:script-7。
我希望这足够清楚!
我就是搞不懂逻辑,任何帮助都会很感激!
哦,只有香草JS;没有jQuery等,谢谢!
我保证会把一个问题的答案张贴在Stackoverflow上,每一个答案都是为了回答这个问题!答应我!
发布于 2011-10-27 22:16:58
是否真的有必要填补这些空白?
我可以想象,保持一个运行计数器,只增加它的使用就更容易了,特别是考虑到您可以使用9,007,199,254,740,992唯一的JSONP请求:
var requestJSONP = (function () {
var guid = 0;
return function (url) {
var id = 'script-' + guid++;
var script = document.createElement('script');
script.id = id;
script.src = url;
script.type = 'text/javascript';
script.onload = function () {
this.parentNode.removeChild(this);
};
document.getElementsByTagName('head')[0].appendChild(script);
return id;
};
})();闭包是可选的,但它将防止任何其他脚本更改guid。
示例:
var scriptId = requestJSONP('/request/resource?callback=handler');发布于 2011-10-27 22:10:19
你可以这样做:
var scripts = document.getElementsByTagName('script'); // we're getting all scripts from page
var ids = [];
for (i in scripts) { // iterate by them
var id = scripts[i].id; // take 'id' attribute from current script
if (id && id.match(/script-\d+/)) { // check if id matches 'script-...' pattern
ids.push( parseInt(id.substring(id.indexOf('-')+1),10) ); // take only nomber and convert it to a decimal number, push this number to ids array
}
}
ids = ids.sort(function(a,b){return a > b;}); // sort array ASC
var lastId = ids.pop(); // take the last value from arrayhttps://stackoverflow.com/questions/7922884
复制相似问题