我试图在点击列表时更改页面的CSS。但是,每当我尝试这样做时,浏览器只会将CSS显示为文本,并且实际上并不将其用于页面。看了一堆这里的答案,但无法让任何工作。
<ul>
<li><a href="character_sheet.php">Character</a></li>
<li><a href="send_message.php">Send Message</a></li>
<li><a href="view_messages.php">Messages</a></li>
<li><a href="view_blog.php">View Blog</a></li>
<li><a href="history.php">History</a></li>
<li><a id="test" href="styles.css" rel="stylesheet" type="text/css">Dark Theme</a></li>
<li><a id="test2" href="styles2.css" rel="stylesheet" type="text/css">Red Theme</a></li>
<li><a id="test3" href="styles3.css" rel="stylesheet" type="text/css">Light Theme</a></li>
<li><a href="index.php">Logout</a></li>
</ul>
<script>
$(document).ready(function() {
$("#test").attr("href", "styles.css");
});
$(document).ready(function() {
$("#test2").attr("href", "styles2.css");
});
$(document).ready(function() {
$("#test3").attr("href", "styles3.css");
});
</script>
编辑:
我已经尝试过用户neil所说的事情,但每当我实现以下内容时,我都无法点击列表条目。用手指将光标悬停在链接上时,光标不会变为小手。点击什么都不做。
<li><a class="test" data-src="styles.css">Dark Theme</a></li>
<li><a class="test" data-src="styles2.css">Red Theme</a></li>
<li><a class="test" data-src="styles3.css">Light Theme</a></li>
<li><a href="index.php">Logout</a></li>
</ul>
<script>
$(document).ready(function(){
$(".test").on('click', function(){
$('head').append('<link rel="stylesheet" href="' + this.getAttribute('data-src') + '" type="text/css" />');
});
});
</script>
EDIT2: 我已经实现了另一个用户解决方案仍然无法解决我的问题。如果你打算关注我的帖子,请告诉我为什么至少,我真的想解决这个问题。我的新代码:
<!DOCTYPE html>
<html>
<head>
<link href="styles.css" rel="stylesheet">
</head>
<body>
<div id="header">
<h1>D20-TABLEKEEPER</h1>
<form action="blurb.php">
<input type="submit" value="BLURB" size="21">
</form>
</div>
<ul>
<li><a href="character_sheet.php">Character</a></li>
<li><a href="send_message.php">Send Message</a></li>
<li><a href="view_messages.php">Messages</a></li>
<li><a href="view_blog.php">View Blog</a></li>
<li><a href="history.php">History</a></li>
<li><a href="#" class="changeStyles" data-src="styles.css">Dark Theme</a></li>
<li><a href="#" class="changeStyles2" data-src="styles2.css">Red Theme</a></li>
<li><a href="#" class="changeStyles3" data-src="styles3.css">Light Theme</a></li>
<li><a href="index.php">Logout</a></li>
</ul>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js">
$(document).ready(function(){
$(".changeStyle").click(function(){
var style = $(".changeStyles").attr('data-src');
$('head').append('<link href="'+ style +'" rel="stylesheet">');
});
$(".changeStyle1").click(function(){
var style = $(".changeStyles2").attr('data-src');
$('head').append('<link href="'+ style +'" rel="stylesheet">');
});
$(".changeStyle1").click(function(){
var style = $(".changeStyles3").attr('data-src');
$('head').append('<link href="'+ style +'" rel="stylesheet">');
});
});
</script>
答案 0 :(得分:2)
使用jQuery我可以提供没有真正的帮助,但使用vanilla javascript很容易做到。将id分配给原始样式表以便可以轻松定位,使用querySelectorAll
标识用于切换css的链接并为每个链接分配一个事件监听器。下面的代码还会将所选值存储在localStorage
中,以便用户的选择在页面/会话中保持不变。
假设有三个样式表(所有目录都与当前页面相同,否则需要添加路径)名为styles.css
,styles2.css
和styles3.css
,为简单起见如下:< / p>
styles.css
----------
html, html *{
background:red;
color:white;
}
styles2.css
-----------
html, html *{
background:blue;
color:yellow;
}
styles3.css
-----------
html, html *{
background:green;
color:orange;
}
<!doctype html>
<html>
<head>
<title>css style switcher - no jQuery</title>
<link id='style' href='styles.css' rel='stylesheet'>
<script type='text/javascript'>
function bindEvents(){
var css=document.getElementById('style');
var col=document.querySelectorAll('a.changeStyle');
/* iterate through collection and assign listener */
for( var n in col )if( col[n].nodeType==1 ) col[n].onclick=function(e){
e.preventDefault();/* prevent jumping to top of page etc */
var el=typeof(e.target)!='undefined' ? e.target : e.srcElement;
/* assign style attributes */
css.href=el.dataset.style;
css.rel=el.dataset.rel;
css.type=el.dataset.type;
/* store reference to style selected in localstorage */
localStorage.setItem( 'style', el.dataset.style );
};
/* if there is a reference to the user's css choice in storage, assign it */
if( localStorage.getItem( 'style' )!=null ) css.href=localStorage.getItem( 'style' );
}
document.addEventListener( 'DOMContentLoaded', bindEvents, false );
</script>
</head>
<body>
<ul>
<li><a href='character_sheet.php'>Character</a></li>
<li><a href='send_message.php'>Send Message</a></li>
<li><a href='view_messages.php'>Messages</a></li>
<li><a href='view_blog.php'>View Blog</a></li>
<li><a href='history.php'>History</a></li>
<li><a href='#' class='changeStyle' data-style='styles.css' data-type='text/css' data-rel='stylesheet'>Dark Theme</a></li>
<li><a href='#' class='changeStyle' data-style='styles2.css' data-type='text/css' data-rel='stylesheet'>Red Theme</a></li>
<li><a href='#' class='changeStyle' data-style='styles3.css' data-type='text/css' data-rel='stylesheet'>Light Theme</a></li>
<li><a href='index.php'>Logout</a></li>
</ul>
</body>
</html>
答案 1 :(得分:1)
首先,我没有看到你绑定click
$(document).ready(function(){
$(".test").on('click', function(){
$('head').append('<link rel="stylesheet" href="' + this.getAttribute('data-src') + '" type="text/css" />');
});
});
和你的HTML
<li><a class="test" data-src="styles.css">Dark Theme</a></li>
<li><a class="test" data-src="styles2.css">Red Theme</a></li>
<li><a class="test" data-src="styles3.css">Light Theme</a></li>
这样,在任何.test
点击中,您都会将<link>
css附加到head
。
答案 2 :(得分:0)
您需要将其添加到页面的head部分。
例如
$("a").click(function () {
$('head').append('<link rel="stylesheet" href="style.css" type="text/css" />');
});
请参阅本教程
http://www.rickardnilsson.net/post/Applying-stylesheets-dynamically-with-jQuery
答案 3 :(得分:0)
我试了一下。而且,它正在发挥作用。
HTML页面
<html>
<head>
<link href="styles.css" rel="stylesheet">
<title>asd</title>
</head>
<body>
<a class="changeStyle1" data-src="style.css">style1</a>
<a class="changeStyle" data-src="style1.css">style1</a>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script>
$(document).ready(function(){
$(".changeStyle").click(function(){
var style = $(".changeStyle").attr('data-src');
$('head').append('<link href="'+ style +'" rel="stylesheet">');
});
$(".changeStyle1").click(function(){
var style = $(".changeStyle1").attr('data-src');
$('head').append('<link href="'+ style +'" rel="stylesheet">');
});
});
</script>
</body>
</html>
<强>的style.css 强>
a {color:red;}
<强> style1.css 强>
a {color:green;}