Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: JavaScript подменить дефолтный href у stylesheet
цитата
03/07/11 в 13:41
 Vyacheslav
Как можно заменить у уже существующего в документе
<link rel="stylesheet" id="css1" type="text/css" href="styles/index.css" media="all">
href, например на href="styles/index_xxx.css"?

Интересует именно при наличии дефолтного пути. Так как
Код:
if (...) document.write ('<link rel="stylesheet" id="css1" type="text/css" href="styles/index.css" media="all">')
else
document.write ('<link rel="stylesheet" id="css1" type="text/css" href="styles/index_xxx.css" media="all">');

и так понятно.
цитата
03/07/11 в 14:03
 Alexandur
document.getElementById('css1').href = 'styles/index_xxx.css';
цитата
03/07/11 в 14:13
 Vyacheslav
Бля! Забыл убрать из кода id="css1 от старого эксперимента!
Не прокатывает с id. Стили накладываются друг на друга и срабатываю только те правила, которых нет в index.css

Может можно как-то регулярным выражением подменить?
цитата
03/07/11 в 14:32
 Alexandur
Vyacheslav писал:
Не прокатывает с id. Стили накладываются друг на друга и срабатываю только те правила, которых нет в index.css

Странно, попробуй добавить:
Код:
<meta http-equiv="PRAGMA" content="NO-CACHE" />
цитата
03/07/11 в 14:45
 Vyacheslav
gimcnuk писал:
Странно, попробуй добавить:
Код:
<meta http-equiv="PRAGMA" content="NO-CACHE" />

Не в этом смысле! Старые стили перебивают часть новых. Видны только небольшие изменения - это как раз несколько стилей из второго css файла.
Всёё же добавыли как ты сказал, не помогло.

Для этого варианта надо как-то обнулить сначала текущий \ дефолтный набор стилей, а затем применять document.getElementById('css1').href = 'styles/index_xxx.css';
цитата
03/07/11 в 15:45
 Vyacheslav
Посмотрел дебаггером. Если уж быть точным, то этот код
document.getElementById('css1').href = 'styles/index_xxx.css';
делает следкющее:
Код:
<link rel="stylesheet" id="css1" type="text/css" href="styles/index.css" href="styles/index_xxx.css" media="all">
цитата
04/07/11 в 17:00
 Vyacheslav
Короче грабли какие-то!
UP
цитата
04/07/11 в 20:19
 Sterx
полныйтпуть мей би?
цитата
05/07/11 в 00:05
 CABMIT
Браузер то какой? У меня всё работает

alert(document.getElementById('css1').href) что говорит?
цитата
05/07/11 в 00:11
 Vyacheslav


Firefox.
Что именно работает? Я же говорю, что в дебагере видно, что накладываются как раз оба стиля. Т.е. оно то работает, но на половину. Старые стили получаются приоритетнее новых.

Т.е., если в стиле index.css есть A {color:#СС0000}, а в index_xxx.css - A {color:#00FF00; text-decoration:none;}, то в результате это скрипта d документе будет смесь A {color:#СС0000; text-decoration:none;}
цитата
05/07/11 в 00:40
 CABMIT
Vyacheslav писал:
Что именно работает?

ВСЁ работает. FF3.6.18. В файрбаге видно, что стили заменяются, а не накладываются. Проверь в другом браузере

И всё-таки, alert что выводит? Элемент с id=css1 точно единственный на странице?
цитата
05/07/11 в 09:30
 Vyacheslav
Firefox 5.0
Алерт показывает пустой в этом коде:

Код:
<html>
<head>
<link rel="stylesheet" id="css1" type="text/css" href="styles/index.css" media="all">
<script type="text/javascript">
alert(document.getElementById('css1').href);
document.write ('<link rel="stylesheet" id="css1" type="text/css" href="styles/index_xxx.css" media="all">');
</script>
</head>
<body>
</body>
</html>
цитата
05/07/11 в 11:03
 CABMIT
Вот что у меня показывает твой код: http://clip2net.com/s/12n9U
Попробуй в другом браузере. С кодом всё в порядке
цитата
05/07/11 в 12:02
 Vyacheslav
Всё верно, проблема была походу в том, что я запускал из дримвивера..
Алерт отображает в хроме: file:///C:\temp\styles\index.css

Вот результаты Firebug

Chrome 12:
Код:
<html><head>
<link rel="stylesheet" id="css1" type="text/css" href="styles/index.css" media="all">
<script type="text/javascript">
alert(document.getElementById('css1').href);
document.write ('<link rel="stylesheet" id="css1" type="text/css" href="styles/index_xxx.css" media="all">');
</script><link rel="stylesheet" id="css1" type="text/css" href="styles/index_xxx.css" media="all">
</head>
<body>


</body></html>


Firefox 5.0
Код:
<html>
<head>
<link id="css1" media="all" href="styles/index.css" type="text/css" rel="stylesheet">
<script type="text/javascript">
alert(document.getElementById('css1').href);
document.write ('<link rel="stylesheet" id="css1" type="text/css" href="styles/index_xxx.css" media="all">');
</script>
<link id="css1" media="all" href="styles/index_xxx.css" type="text/css" rel="stylesheet">
</head>
<body> </body>
</html>


Как я и говорил, вставляются оба стиля.
цитата
05/07/11 в 12:14
 CABMIT
Ну прально, второй через document.write вставляется. Или я что-то не понял?
цитата
05/07/11 в 12:21
 Vyacheslav
Блин! Ты прав, туплю.. icon_smile.gif
document.getElementById('css1').href = 'styles/index_xxx.css'; сработало!
цитата
05/07/11 в 13:21
 CABMIT
smail54.gif


Эта страница в полной версии