我正在尝试创建一个函数,同时检查文档中是否存在指向某个CSS样式表的链接,如果不存在,则创建该链接并返回该链接样式表的Javascript对象:
(function(doc) {
const sheets = doc.styleSheets;
const newSheet_path = location.origin + '/newSheet.css';
const newSheet = sheets => {
let sheetExists;
for(let sheet in sheets) {
if(sheets[sheet].href === newSheet_path) {
sheetExists = sheets[sheet];
}
}
if(!sheetExists) {
let addSheet = doc.createElement('link');
addSheet.setAttribute('rel', 'stylesheet');
addSheet.setAttribute('href', 'newSheet.css');
doc.head.appendChild(addSheet);
return addSheet;
} else {
return sheetExists;
}
}
console.log(newSheet(sheets));
}(window.document));
使用此代码,如果工作表不存在,它将返回link
元素,这是有意义的,但我需要与其关联的Javascript对象。我尝试用下面这样的语句替换addSheet返回语句:
return Array.from(sheets).pop();
它只返回新工作表之前的任何现有工作表,还返回以下内容:
return Array.from(sheets).find((s,i,S) => S[i].href === newSheet_path);
但这又回到了undefined
。如果我猜对了,这是因为在添加新的样式表前,sheets
被定义为样式表列表,因此,变量不会在包含新表的情况下重新定义。我试着在return语句之前重新定义它--
sheets = doc.styleSheets;
return Array.from(sheets).pop();
--但是没有用。这是可能的吗?这是我想要实现的吗?或者我必须将这个过程分解成多个函数?
https://stackoverflow.com/questions/52459072
复制相似问题