Oto rozwiązanie, które wytłumaczę krok po kroku.
Najpierw zadzwoń pod numer colorReplace("#789034", "#456780");
. Pierwsza wartość to kolor docelowy, a druga kolor zastępczy.
Wewnątrz tego obiektu $('*').map(function(i, el) {
wybierze wszystkie znaczniki w drzewie DOM. Dla każdego elementu zwracana jest jego tablica stylów getComputedStyle(el)
. Możesz dostosować selektor do szybszego przetwarzania (np. $('div').map(function(i, el)) {
).
Wszystkie atrybuty stylu zawierające "kolor" (np. background-color
, -moz-outline-color
itp.), Sprawdzenie, czy wartość koloru jest równa kolorowi docelowemu. Jeśli tak, zostanie zastąpiony kolorem docelowym.
Kolory są zwracane jak rgba(0,0,0,0)
lub rgb(0,0,0)
, a nie jak #FFFFFF
, więc szybka konwersja jest wykonywana z rgb na hex dla porównania. To wykorzystuje wewnętrzną funkcję rgb2hex()
.
Mam nadzieję, że to jest to, czego szukasz.
function colorReplace(findHexColor, replaceWith) {
// Convert rgb color strings to hex
function rgb2hex(rgb) {
if (/^#[0-9A-F]{6}$/i.test(rgb)) return rgb;
rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
function hex(x) {
return ("0" + parseInt(x).toString(16)).slice(-2);
}
return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
}
// Select and run a map function on every tag
$('*').map(function(i, el) {
// Get the computed styles of each tag
var styles = window.getComputedStyle(el);
// Go through each computed style and search for "color"
Object.keys(styles).reduce(function(acc, k) {
var name = styles[k];
var value = styles.getPropertyValue(name);
if (value !== null && name.indexOf("color") >= 0) {
// Convert the rgb color to hex and compare with the target color
if (value.indexOf("rgb(") >= 0 && rgb2hex(value) === findHexColor) {
// Replace the color on this found color attribute
$(el).css(name, replaceWith);
}
}
});
});
}
// Call like this for each color attribute you want to replace
colorReplace("#789034", "#456780");
.common-color {
color: #789034;
}
.new-cls {
border-color: #789034;
border-width: 4px;
border-style: solid;
}
.awesome-one {
background-color: #789034;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="common-color">color</div>
<div class="new-cls">border-color</div>
<div class="awesome-one">background-color</div>
Może trzeba mieć jedną klasę posiadającą 'color: # 789034;' i dodać tę klasę do wszystkich elementów, w których wymagana jest ten kolor. A potem łatwo będzie zmienić kolor za pomocą jQuery: '$ ('. MyClass'). Css ('color', '# 456780');' – Tushar
jest to praktycznie niemożliwe, ponieważ używam go na właściwościach serwera, jak kolor-obramowania: # 789034- Pomyśl, że stworzyłem wspólną klasę kolorów dla kodu, jak przekazać tę klasę dla koloru obramowania - jak 1px solid - .comon-color. – techsolver
oznacza? tak naprawdę powiedziałem, że chcę zastąpić określony kod koloru innym na wszystkich miejscach za jednym razem przy użyciu jquery- Twój atrybut wyboru kodu, chcę tylko kod do nowego kodu koloru – techsolver