Получить все значения свойств фона и цвета классов css

Я хочу получить все значения свойств фона и цвета всех объявлений CSS.

Например:

    body {
      background: #fff;
    }
    .aaa {
      background: #dedede;
      color: #000
    }
    .text {
      color: #333;
      padding: 10px
    }

Я хочу получить такой вывод, и значения этих свойств должны храниться в массиве.

    body {
      background: #fff;
    }
    .aaa {
      background: #dedede;
      color: #000
    }
    .text {
      color: #333;
    }

Я пытался сделать это с помощью jQuery. Я могу получить значение свойства фона одного конкретного класса, например .aaa или .text. Как получить значения всех классов?

$('#btn-invert').on('click', function() {
  var color = $("body").css("background");
  // var test = invertColor("#00a3fe"); 
  console.info(color); 
});

обратитесь к этому ответу: stackoverflow.com/questions/14318209/…

RK_15 19.02.2019 07:11
«Я хочу получить такой вывод, и эти свойства должны храниться в массиве». — Вы хотите вывести форматированную строку и в виде массива? Каким должен быть формат массива?
nnnnnn 19.02.2019 07:13

@nnnnnn нравится это ["#fff", "#dedede", "#000", "#333"]

Karuppiah RK 19.02.2019 07:17
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
3
542
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Чтобы прочитать стиль, используйте document.styleSheets, который содержит всю информацию (let cssArr=... во фрагменте). Когда вы читаете его в свой массив, вы можете сгенерировать строку из этого массива (let genCssStr во фрагменте). Цвета, прочитанные таким образом, находятся в формате, например. rgb(255, 255, 255) поэтому нам нужно преобразовать их в шестнадцатеричный формат (от rgbToHex src здесь)

const rgbToHex = (rgbStr) => rgbStr && '#'+rgbStr.slice(4,-1).split(',').map(x => (+x).toString(16).padStart(2, '0')).join('');

const styles = document.styleSheets;

let cssArr =[...styles[0].cssRules].map(x=> ({ 
  class:      x.selectorText, 
  color:      rgbToHex(x.style.color),
  background: rgbToHex(x.style.background),   
}));

let genCssStr=''; cssArr.forEach(x=> genCssStr+=`
${x.class} {
  ${(x.background ? 'background: '+x.background : '')}
  ${(x.color ? 'color: '+x.color : '')}
}
`.replace(/^  \n/gm,'')); // remove empty lines 

console.info("array:", JSON.stringify(cssArr));
console.info("text:\n", genCssStr);
body {
      background: #fff;
    }
    .aaa {
      background: #dedede;
      color: #000
    }
    .text {
      color: #333;
      padding: 10px
    }

хороший ответ, но, пожалуйста, добавьте объяснение

לבני מלכה 19.02.2019 07:27

массив: [{"класс":"тело","цвет":"","фон":"#ffffNaN"},{"класс‌​":".myClass","цвет"‌​:"#000000" ,"backgrou‌​nd":"#dedeNaN"},{"cl‌​ass":".myClass2","color":"#333333","back‌​ground":"#ffffNaN"}]

Vipin Kumar Soni 19.02.2019 08:20

@VipinKumarSoni можешь показать тебе css для цветов? Я использую простую функцию rgbToHex, которая работает со стилями OP, но вы можете найти более сложную rgbToHex версию в stackOverflow (но это не тема вопроса OP, поэтому я не буду углубляться в нее в этом ответе)

Kamil Kiełczewski 19.02.2019 08:28

@KamilKiełczewski получил эту ошибку -> Uncaught DOMException: не удалось прочитать свойство «cssRules» из «CSSStyleSheet»: невозможно получить доступ к правилам

Karuppiah RK 19.02.2019 11:18

@Karuppiah это отдельная проблема (и вопрос) - может быть поможет ответ это - если не найти / задать вопрос в stackoverflow. В случае проблемы CORS вы, вероятно, не сможете использовать это решение (напрямую или вообще)

Kamil Kiełczewski 19.02.2019 11:19
<!doctype html>
<html lang = "en">
    <head>
        <meta charset = "utf-8">
        <meta name = "viewport" content = "width=device-width, initial-scale=1">
        <title>jQuery Tests</title>
        <script src = "https://code.jquery.com/jquery-1.12.4.js"></script>
        <script>
        $(function(){
            var myArray = [];
            $("*").each(function() {
                var oneArray = [];
                var tag = $(this).prop("tagName");
                var classname = $(this).attr("class") ? $(this).attr("class") : "N/A";
                var background = $(this).css("background-color");
                var color = $(this).css("color");

                oneArray["tag"] = tag;
                oneArray["classname"] = classname;
                oneArray["background"] = background;
                oneArray["color"] = color;

                myArray.push(oneArray);                                             
            });
            console.info(myArray);
        });
        </script>
        <style>
        body {
          background: #fff;
        }
        .myClass {
            background: #dedede;
            color: #000
        }
        .myClass2 {
            color: #333;
            background: #fff;
        }
        </style>
    </head>
    <body>
        <a class = "myClass" href = "#">link</a>
        <div class = "myClass2"></div>
    </body>
</html>

Другие вопросы по теме