У меня есть тег ссылки css в моем html, как это
<link rel = "stylesheet" href = "skin.css">
Я хочу добавить случайное число, сохраненное в локальном хранилище, в href, как показано ниже.
<link rel = "stylesheet" href = "skin.css?cb=sessionStorage.cbVersion">
Я знаю, что мы можем присвоить этому идентификатор, а затем изменить значение атрибута href, но я пытаюсь найти способ реализовать то же самое без написания дополнительной логики.






CSS является статическим. Например: он всегда будет анализировать значение атрибута href как строку. Итак, учитывая вышеизложенное, он попытается получить доступ к {your-domain}/skin.css?cb=sessionStorage.cbVersion.
Если вам нужно, чтобы он был переменным, у вас есть два варианта:
Во втором случае вам не нужно использовать id, хотя это распространенный (и рекомендуемый) метод нацеливания на элементы. Но вам нужен способ уникальной идентификации вашего элемента, чтобы вы могли изменить его href.
Простой пример:
<link rel = "stylesheet" data-href = "dynamic-stylesheet">
<script>
const link = document.querySelector('link[data-href = "dynamic-stylesheet"]');
link.href = `skin.css?cb=${sessionStorage.cbVersion || 'defaultValue'}`;
</script>Обратите внимание, что это не будет работать в StackOverflow, так как фрагменты изолированы и не имеют доступа к sessionStorage.
Также обратите внимание, что я полностью удалил href, поскольку, если он присутствует и недействителен, это приведет к ошибке 404, поскольку он будет проанализирован в момент анализа <link>, что должно быть до запуска вашего скрипта. Или, как вариант, можно вообще не иметь <link> и создать его с помощью JavaScript с желаемым значением href.
И последнее, но не менее важное: вы всегда должны указывать значение по умолчанию, когда cbVersion не найден в sessionStorage. Улучшенная версия приведенного выше скрипта будет использовать try/catch для получения значения sessionStorage и предоставлять defaultValue, если результирующее значение все еще ложно:
<link rel = "stylesheet" data-href = "dynamic-stylesheet">
<script>
const link = document.querySelector('link[data-href = "dynamic-stylesheet"]');
let cbVersion;
try {
cbVersion = sessionStorage.cbVersion;
} catch(err) {
//console.info(err)
}
link.href = `skin.css?cb=${cbVersion || 'defaultValue'}`;
</script>Как видите, приведенный выше код пытается загрузить https://stacksnippets.net/skin.css?cb=defaultValue (которого не существует) и не выводит ошибку о невозможности доступа к sessionStorage на SO.
получите эти случайные числа и поиграйте с таким javascript
$('head').append('<link rel = "stylesheet" type = "text/css" href = "'skin.css?cb=sessionStorage.' + randomFileNumber + '.css'>");