2012-07-16 72 views
1

试图取代一整页(作品)+同时更换链接到的style.css到game.css的conents,具有查询jquery:将style.css的链接替换为game.css?

$.get('/games/14', function(data){ var $page = $(data); 
    $('head').append('<link rel="stylesheet" href="style2.css" type="text/css" />'); 
    //$('#layout').empty().append($page); 
    $('body').empty().append($page); 
}) 

我似乎无法改变“的style.css “to”game.css“,不管我尝试什么,至于Jquery Guru知道如何完成这个?谢谢 !

UPDATE: 尝试下面仍然有问题的建议,这就是我现在使用(没有替换的.css文件中)

$.get('/games/14', function(data){ 
$("link[href='style.css']").attr({href: 'game.css'}); 
var $page = $(data); 
$('body').empty().append($page); 
}) 

回答

2

在这里雅去,只是测试了这一点,它的工作。

<!DOCTYPE HTML> 
<html> 
<head> 
    <script src="jquery-1.7.2.min.js"></script> 
    <link href="/assets/frontend.css" media="screen" rel="stylesheet" type="text/css" /> 
</head> 
<body> 
    <script> 
     $("link[href='/assets/frontend.css']").attr('href', '/assets/game.css'); 
    </script> 
</body> 
</html> 

为了更好地评价您的评论,我使用了Firebug进行了测试。 使用Console选项卡,我可以看到它首先尝试加载assets/frontend.css,运行JS,然后尝试加载assets/game.css

loading

然后我检查了DOM在Firebug的HTML标签,看到该链接元素href属性更新。在其他的答案提示

enter image description here

+0

也不适用于我你是如何测试它的?我将它保存为.html,当它尝试加载页面时,它仍然显示frontend.css,查看源代码。 – Rubytastic 2012-07-16 23:05:05

+2

在浏览器中单击“查看源代码”将不*显示页面DOM的*当前*状态。它会显示第一个从服务器上取出的文件。即,* original *文件,而不用您使用JavaScript进行的任何更改。我建议使用诸如Chrome/Safari Web Inspector或Firefox的Firebug之类的东西。 – 2012-07-16 23:07:09

+0

Edd Morgan是正确的。只需查看源代码就不会显示自从DOM初始加载以来已更新的任何内容。我已经更新了答案,并解释了我是如何测试它的。 – 2012-07-16 23:16:43

1

目标与href属性链接元素“的style.css game.css',取而代之的是元素的href属性“:

$("link[href='style.css']").attr({href: 'game.css'}); 
+0

好吧,我尝试了这些我自己都没有用,我试图取代这一<链接HREF =“/资产/ frontend.css”媒体=“屏幕”的rel = “stylesheet”type =“text/css”/>与“/assets/game.css”有什么想法? – Rubytastic 2012-07-16 22:34:32

1

您可以使用jQuery的attr()功能改变HREF。

$("link[href=style.css]").attr('href', 'game.css'); 

你可能会想要使用更坚固耐用的选择器,但这样做可以。

+0

似乎不正确的语法与上面的工作相同的问题,虽然。 – Rubytastic 2012-07-16 22:35:54

+0

上面的语法是正确的。确保jQuery选择器*中的“style.css”匹配你想要替换的'link'的href,并且'attr()'调用中的“game.css”匹配地址您试图将其更改为的样式表。另外,确保原始的'link'元素确实存在。在你的问题编辑中,你似乎已经移除了你用来插入'link'元素的电话。 – 2012-07-16 22:52:00

1
href

属性取代不一致由不同的浏览器处理的(即可能不会触发再流/重新绘制)。相反,原始样式元素必须被移除,并且必须在其位置插入具有期望的href的新元素。使用jQuery一个直观的方式来做到这一点:

$('link[href$="style.css"]').replaceWith('<link href="game.css" ... ></link>'); 
+0

哪些浏览器不一致处理?我只是在IE7,IE8,IE9,FF,Safari和Chrome上进行了测试。它们在所有这些方面都按预期工作。 – 2012-07-16 23:31:28

+0

@CodyBonney:传闻,但我一直在假设IE7&8会搞砸这件事;如下所述:http://stackoverflow.com/q/3007669/1081234 – 2012-07-17 04:58:49