如何限制两次调用js附加功能
How to restrict calling js appending functionality twice
我需要动态附加 css 和 js 文件并使用以下方法
document.getElementsByTagName('head')[0].appendChild();
此方法不允许第二个参数。
我必须动态附加 css 和 js 文件。我两次调用上述方法来附加文件。限制上述方法仅被调用一次的任何其他通用方法。
这是我试过的:
var jscss = function(cp, sp){
var css = document.createElement("link");
css.setAttribute("rel", "stylesheet");
css.setAttribute("type", "text/css");
css.setAttribute("href", cp);
document.getElementsByTagName('head')[0].appendChild(css);
var script = document.createElement('script');
script.src = sp;
document.getElementsByTagName('head')[0].appendChild(script);
};
jscss();
好吧,我认为您可以通过向元素提供 id 并在附加它之前检查该元素是否存在来实现它。
示例:
var jscss = function(cp, sp){
if(!document.getElementById("customStyleSheet")){
var css = document.createElement("link");
css.setAttribute("rel", "stylesheet");
css.setAttribute("id", "customStyleSheet");
css.setAttribute("type", "text/css");
css.setAttribute("href", cp);
document.getElementsByTagName('head')[0].appendChild(css);
}
if(!document.getElementById("customScript")){
var script = document.createElement('script');
script.src = sp;
script.id = "customScript";
document.getElementsByTagName('head')[0].appendChild(script);
}
};
jscss();
希望这对您有所帮助:)
使用一个变量来记住函数是否已经 运行。
var jscss_run = false;
function jscss(cp, sp) {
if (jscss_run) {
return; // don't run a second time
}
jscss_run = true;
// do all the real work
}
您可以使用 documentfragment 以便只需要调用一次 appendChild 来添加两个元素:
var jscss = function(cp, sp){
var fragment = document.createDocumentFragment();
var css = document.createElement("link");
css.setAttribute("rel", "stylesheet");
css.setAttribute("type", "text/css");
css.setAttribute("href", cp);
fragment.appendChild(css);
//Does not affect the DOM
var script = document.createElement('script');
script.src = sp;
fragment.appendChild(script);
//Does not affect the DOM
document.getElementsByTagName('head')[0].appendChild(fragment);
//Adds both elements to the DOM
};
jscss();
我需要动态附加 css 和 js 文件并使用以下方法
document.getElementsByTagName('head')[0].appendChild();
此方法不允许第二个参数。 我必须动态附加 css 和 js 文件。我两次调用上述方法来附加文件。限制上述方法仅被调用一次的任何其他通用方法。
这是我试过的:
var jscss = function(cp, sp){
var css = document.createElement("link");
css.setAttribute("rel", "stylesheet");
css.setAttribute("type", "text/css");
css.setAttribute("href", cp);
document.getElementsByTagName('head')[0].appendChild(css);
var script = document.createElement('script');
script.src = sp;
document.getElementsByTagName('head')[0].appendChild(script);
};
jscss();
好吧,我认为您可以通过向元素提供 id 并在附加它之前检查该元素是否存在来实现它。 示例:
var jscss = function(cp, sp){
if(!document.getElementById("customStyleSheet")){
var css = document.createElement("link");
css.setAttribute("rel", "stylesheet");
css.setAttribute("id", "customStyleSheet");
css.setAttribute("type", "text/css");
css.setAttribute("href", cp);
document.getElementsByTagName('head')[0].appendChild(css);
}
if(!document.getElementById("customScript")){
var script = document.createElement('script');
script.src = sp;
script.id = "customScript";
document.getElementsByTagName('head')[0].appendChild(script);
}
};
jscss();
希望这对您有所帮助:)
使用一个变量来记住函数是否已经 运行。
var jscss_run = false;
function jscss(cp, sp) {
if (jscss_run) {
return; // don't run a second time
}
jscss_run = true;
// do all the real work
}
您可以使用 documentfragment 以便只需要调用一次 appendChild 来添加两个元素:
var jscss = function(cp, sp){
var fragment = document.createDocumentFragment();
var css = document.createElement("link");
css.setAttribute("rel", "stylesheet");
css.setAttribute("type", "text/css");
css.setAttribute("href", cp);
fragment.appendChild(css);
//Does not affect the DOM
var script = document.createElement('script');
script.src = sp;
fragment.appendChild(script);
//Does not affect the DOM
document.getElementsByTagName('head')[0].appendChild(fragment);
//Adds both elements to the DOM
};
jscss();