有可能是更好的方式來完成你所想 - 這是什麼?
我認爲你想找到一些元素的顏色,因爲它意味着某種東西 - 比如,如果背景是藍色的,它是側邊欄,或者如果按鈕的背景是灰色的,它被禁用,或者在你的情況下,如果選擇的選項是粉紅色的,那麼它是一隻狗。實質上,您將應用程序的部分狀態存儲在CSS屬性中。但是,正如你發現的那樣,一旦你設置了CSS,將它重新取出可能並不是微不足道的。所以最基本的解決方案是查看是否有辦法在JS中管理應用程序的狀態。
就你而言,你似乎想要在select
元素中獲取所選選項的背景顏色,以便對其進行操作。考慮爲每個選項維護一系列相關信息;或者將數據屬性放在您輕鬆獲得的每個選項上;或者其他一些不需要在樣式字符串中搜索的方法。其次,經驗豐富的HTML/CSS人非常贊同使用單獨的樣式屬性不如使用類更可取。通過類,我可以通過設置類來爲元素設置一組屬性;並且我可以輕鬆地使用標準DOM或jQuery API查詢,刪除或替換類。
第三,它也非常贊同使用regexp來解析語言 - 即使像CSS這樣簡單的語言 - 它也不是一個好主意。你總會錯過一些東西,然後你的正則表達式就會崩潰。例如,在您的原始正則表達式中,以及答案中的一箇中,正則表達式將不起作用,除非冒號周圍只有零個或一個空格。一些可憐的靈魂 - 也許你,也許是一些在今後六個月內出現的新人 - 將不得不尋找並修復當有人在冒號後放置兩個空間時會出現的錯誤。
或者你會假設背景顏色總是使用十六進制值設置的 - 並在此假設下構建你的代碼。但是隨後這個新人出現並決定使用hsl
來指定一種顏色 - 並且代碼將再次破壞。第四,如果對你來說是個問題,只有在該元素上明確設置了背景顏色屬性時,「正則表達式字符串」方法才能起作用。例如,如果背景顏色來自CSS規則,那麼這種方法就不會選擇它。通常,這是人們建議使用getComputedStyle
或jQuery的.css()
這一點,這確實會起作用(儘管您仍然可以獲得rgb(r,g,b)
格式,如果您確實希望使用十六進制格式,則必須轉換) - - 但問題仍然存在,爲什麼你需要將信息「存儲」到CSS中,然後再次返回?這當然有用例,但它們相對較少。
如果你確信你需要檢索的背景色,從特定元素的風格,並以十六進制格式(爲什麼?),然後得到它,並將其轉換:
backgroundColor = select.find(":selected").css('backgroundColor');
rgbColor = convertRGBToHex(style);
你可以找到在SO或其他地方有大量的方法來convertRGBToHex
。
爲什麼不使用jquery並使用$(el).css('background-color')? –
這可能是因爲在#後面期望#[0-9a-f]中的6個而不是[0-9a-f]中的6個。您可以嘗試明確地將該部分括起來,即#([0-9a-f] {6}),以確保6綁定到[0-9] [a-f]。你也應該匹配大寫字母A-F。 – Mahout
你爲什麼想這樣做?你打算怎麼處理你回來的顏色? –