2012-07-16 69 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