我有一個頁面,允許用戶動態更改加載的主題(樣式表)。我有一個存儲當前加載的樣式表的themeStyle
<link>
元素。我正在切換它檢測CSS文件何時完成切換
function switchTemplate(stylePath){
var ns = $('<link>', {
href: stylePath,
id: 'themeStyle',
type: 'text/css',
rel: 'stylesheet'
});
$('#themeStyle').replaceWith(ns);
self._cssIsLoaded(ns.get(0), stylePath);
}
然後使用this function來檢測它是否已加載。
它只是偶爾工作,但我意識到它可能永遠不會工作,因爲#themeStyle css將永遠加載,但不一定會改變。
我添加了傳遞給_cssIsLoaded函數的css文件路徑,但它在加載完成前發生了變化,所以我不知道用來檢查它是否已經切換。
我現在能想到的唯一解決方案是在每個樣式表中都有一個隱藏div stylePath
作爲content:元素,並檢查該div的內容是否是正確的stylePath ...但需要更改每個樣式表, HTML的和 JS以及只是有點cludgy。有沒有更合理的方法來實現這一點?
編輯:我想過在最後加入新的樣式,但有可能並非所有的樣式都會被新的樣式覆蓋。總是有一個基本樣式表,並且這些加載的特定規則僅影響頁面的一部分。
這比我想象的更加優雅。不過,我真的很喜歡這種方式,不需要我改變我所有的CSS文件,或者將大量的CSS文件放在彼此的頂部。我需要'加載完成'功能的原因是js響應某些元素的不同位置 – Damon