[英]Accessing a style property while using AngularJS to set styles dynamically
我試圖讓用戶動態設置樣式,但是我也想獲取某些樣式的值。 例如,我要檢查用戶是否將H1元素的顏色設置為“橙色”。
我的HTML
<body ng-controller="mainController">
<h1 id="myH1">Hello World!</h1>
<textarea ng-model="outputCss"></textarea>
<style media="screen" type="text/css">
{{outputCss}}
</style>
</body>
我的Javascript,在mainController中
var myH1Style = document.getElementById('myH1').style;
$scope.$watch('outputCss', function(newValue, oldValue){
if (myH1Style.color == "orange"){
alert("Nice work!");
}
console.log(myH1Style.color);
});
用戶輸入示例
#myH1 {
color: orange;
}
h1 {
font-weight: 900;
}
問題是,if條件永遠無法滿足,並且控制台日志始終為空。 如何讀取使用此方法添加的CSS屬性?
您的問題基本上是兩個問題:
如何比較顏色? (可悲的是,這里的答案很丑陋,您返回的值可能不是應用該值的格式,因此您可能會得到"orange"
或"rgb(255, 165, 0)"
或"rgb(255,165,0)"
或"rgba(255, 165, 0, 1)"
"rgb(255,165,0)"
"rgba(255, 165, 0, 1)"
...)
這些問題的答案組合會回答您的問題。 基本上,您需要使用getComputedStyle(element)
(或舊IE上的element.currentStyle
)來獲取計算出的樣式( .style
僅使您直接將樣式應用於元素),並且返回的值可能不在樣式表中的格式(但在某些瀏覽器中可能因此...難看)。
旁注:硬編碼的id
值是一個紅色標記。 使用ref
代替。
甚至在告訴您以錯誤的方式比較顏色之前,請首先document.getElementById('myH1').style;
將返回內聯樣式,而不是CSS規則應用的樣式。 並且您正在動態地更改CSS規則,並根據該規則觀察內聯樣式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.