2016-07-25 36 views
0

標題可能沒有任何意義,所以發生了什麼。我試圖運行一個onclick()函數,它將交換樣式表以進行視覺更改。我的做法是值href的一部分。具體來說,我將白色更改爲黑色,以便將href的值從styles-black.css更改爲styles-black.css。setAttribute()將函數的文本設置爲href值

我jQuery的,沒有問題這樣做:

$(".onoffswitch").click(function(){ 
    if($('.onoffswitch-checkbox').is(':checked') == false) {    
    $("#pagestyle").attr('href', function(i, blackCSS) { 
     return blackCSS.replace('white', 'black');     
    });    
    } 

});

我不是專家,所以這可能是非常低效的,但我仍然在努力學習。 現在,當我嘗試複製這使用香草JS我得到一些奇怪的結果。首先,這裏是我的代碼:

document.getElementById("pagestyle").setAttribute("href", (function(i,blackCss) { 
     return blackCSS.replace("white", "black"); 
    })) 

我運行它之後,我按照它與document.getElementById('pagestyle').getAttribute('href');檢查href的值,以查看功能是否工作,.....這就是我m到處:

"function (i,blackCss) { 
     return blackCSS.replace("white", "black"); 
    }" 

這裏的元素:

<link id="pagestyle" rel="stylesheet" type="text/css" href="function (i,blackCss) {&#10;   return blackCSS.replace(&quot;white&quot;, &quot;black&quot;);&#10;  }"> 

顯然,我做錯了什麼。奇怪的是,如果我不檢查自己,我會認爲它的工作!款式改變。如果我使用Chrome/IE工具檢查元素,我可以看到styles-black.css的樣式正在被應用!但爲什麼它在元素的屬性中顯示函數呢?那不可能吧?當然,我願意向我展示它是如何完成的。

編輯 這裏的元素的初始狀態:

<link id="pagestyle" rel="stylesheet" type="text/css" href='css/styles-white.css'> 
+2

你......不會調用該函數。 'setAttribute(「href」,(function(i,blackCss){blah blah blah;})());'< - missing()那裏。 –

+1

你不能用簡單的JavaScript代替複雜的jQuery方法,並期望它能夠正常工作。你可能想'pagestyle.href = pagestyle.href.replace(「white」,「black」);'或者其他東西。 –

回答

2

這有望增加()執行函數,因爲屬性值只能是字符串,所以你的函數被轉換成一個字符串。

在香草JS你做這樣的:

var el = document.getElementById("pagestyle"), 
 
    initial = el.getAttribute("href"); 
 
el.href = initial.replace("white", "black");
<link id="pagestyle" rel="stylesheet" type="text/css" href='css/styles-white.css'>

+0

簡短,甜美,並重點。這工作。謝謝。 –

0

您需要在最後

document.getElementById("pagestyle").setAttribute("href", (function(blackCss) { 
     return blackCSS.replace("white", "black"); 
    })(document.getElementById("pagestyle").href)) ; 
+1

blackCSS將被定義爲 – epascarello

+0

blackCss假設爲'pagestyle'的href值 –

+0

在您編輯您的答案兩次之前,這是未定義的。 – epascarello