Javascript: динамическое изменение файла CSS + cookie
Я хочу изменить используемый файл CSS (<link href="..." />
) динамически использовать только javascript и сохранять изменения в куки.
Это версия jQuery, которая делает то, что я хочу ( ссылка), но как я могу сделать это в javascript?
if($.cookie("css")) {
$("link").attr("href",$.cookie("css"));
}
$(document).ready(function() {
$("#nav li a").click(function() {
$("link").attr("href",$(this).attr('rel'));
$.cookie("css",$(this).attr('rel'), {expires: 365, path: '/'});
return false;
});
});
Заранее спасибо.
2 ответа
Может быть, это могло бы помочь вам..
(function() {
var e = document.createElement('link');
e.href = document.location.protocol + '//example.com/file.css';
e.type = 'text/css';
e.rel = 'stylesheet';
e.media = 'screen';
document.getElementsByTagName('head')[0].appendChild(e);
}());
Редактировать полный JavaScript без JQuery
function createCookie(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
function eraseCookie(name) {
createCookie(name,"",-1);
}
document.addEventListener('DOMContentLoaded',function(){
if(readCookie('css')){
var e = document.getElementById('test-css'); // <link href="..." id="test-css"/>
e.href = readCookie('css');
}
var element = document.getElementById('change-css'); // <a herf="#" id="change-css" rel="file.css">Click Here</a>
element.addEventListener('click', function (event) {
var e = document.getElementById('test-css');
e.href = this.rel;
if(readCookie('css')){
eraseCookie('css');
}
createCookie('css',this.rel,365);
event.preventDefault();
}, false);
})
Читайте: http://www.quirksmode.org/js/cookies.html
И: http://www.hunlock.com/blogs/Howto_Dynamically_Insert_Javascript_And_CSS
Во-первых, давайте создадим пример HTML-макета.
<html> <!--#include javascript.js styles.css-->
<body>
<span>sometext</span>
<p>somemoretext</p>
</body>
</html>
Далее, давайте сделаем пример макета CSS.
span {
color: red;
}
p {
color: blue;
}
body {
background: black;
}
Теперь это JavaScript. Прежде чем мы что-то сделаем, куки не могут хранить информацию о CSS. Мы будем использовать имена файлов cookie, чтобы определить тип загружаемого стиля. Приведенный выше ресурс quirksmode позволяет нам легко использовать файлы cookie.
if(readCookie("newStyle")) {
// do something
} else {
// do something else
}
В этом случае мы хотим изменить стили. Мы можем использовать два метода: document.element.style.property
или же appendChild
с помощью другого CSS-листа. В этом примере мы используем document.element.style.property
,
if(readCookie("newStyle")) {
eraseCookie("newStyle")
document.getElementsByTagName("span")[0].style.color = "purple"
document.getElementsByTagName("p")[0].style.color = "pink"
} else {
createCookie("newStyle",0000,60)
}
Пример из жизни: http://jsfiddle.net/5HGsH/3/
Обновите страницу несколько раз, чтобы увидеть разноцветные слова.