我编写了一些代码,可以更改普通版和可访问版之间的样式表。 理论上这是有效的,但是一旦刷新页面,它就会回到默认版本。我知道我需要存储某种类型的cookie,我已经尝试了一些我在Google上找到的脚本,但都没有用。 如果有人知道我需要什么,以便选定的样式表能够贯穿整个站点,直到请求另一个,那将不胜感激。
到目前为止代码:
<link type="text/css" href="style.css" rel="stylesheet" title="normal" />
<link type="text/css" href="css/accessible.css" rel="alternate stylesheet" title="accessible" />
<form>
<input type="submit" onclick="switch_style('normal');return false;" name="theme" value="" id="normal" title="View the site in it's original format">
<input type="submit" onclick="switch_style('accessible');return false;" name="theme" value="" id="accessible" title="View the site in it's simplest form">
</form>
这是我已经合并的javascript,它似乎在某个地方有一个bug,但我不能为我的生活找到它:
var style_cookie_name = "style" ;
var style_cookie_duration = 30 ;
function switch_style ( css_title )
{
var i, link_tag ;
for (i = 0, link_tag = document.getElementsByTagName("link") ;
i < link_tag.length ; i++ ) {
if ((link_tag[i].rel.indexOf( "stylesheet" ) != -1) &&
link_tag[i].title) {
link_tag[i].disabled = true ;
if (link_tag[i].title == css_title) {
link_tag[i].disabled = false ;
}
}
set_cookie( style_cookie_name, css_title,
style_cookie_duration );
}
}
function set_style_from_cookie()
{
var css_title = get_cookie( style_cookie_name );
if (css_title.length) {
switch_style( css_title );
}
}
function set_cookie ( cookie_name, cookie_value,
lifespan_in_days, valid_domain )
{
var domain_string = valid_domain ?
("; domain=" + valid_domain) : '' ;
document.cookie = cookie_name +
"=" + encodeURIComponent( cookie_value ) +
"; max-age=" + 60 * 60 *
24 * lifespan_in_days +
"; path=/" + domain_string ;
}
function get_cookie ( cookie_name )
{
var cookie_string = document.cookie ;
if (cookie_string.length != 0) {
var cookie_value = cookie_string.match (
'(^|;)[\s]*' +
cookie_name +
'=([^;]*)' );
return decodeURIComponent ( cookie_value[2] ) ;
}
return '' ;
}
答案 0 :(得分:1)
get_cookie函数中存在一些小错误。
删除:
function get_cookie ( cookie_name )
{
var cookie_string = document.cookie ;
if (cookie_string.length != 0) {
var cookie_value = cookie_string.match (
'(^|;)[\s]*' +
cookie_name +
'=([^;]*)' );
return decodeURIComponent ( cookie_value[2] ) ;
}
return '' ;
}
替换为:
function get_cookie ( cookie_name )
{
var cookie_string = document.cookie ;
if (cookie_string.length != 0) {
var cookie_value = cookie_string.match(
'(^|;) ?' +
cookie_name +
'=([^;]*)(;|$)' );
return decodeURIComponent ( cookie_value[2] ) ;
}
return '' ;
}
希望它可以帮助您或其他有同样问题的人。