Ограничить цвета текста черным

Мне нужен способ запретить пользователям использовать определенные цвета (в целях доступности). У меня есть массив цветов:

var bannedColors = ['aqua', 'mediumseagreen', 'deepskyblue', 'mediumorchid', 'darkslategray', 'teal', 'mediumaquamarine', 'steelblue', 'indigo', 'slategrey', 'gold', 'darkorange', 'mediumvioletred', 'lightslategrey', 'orange', 'orangered', 'crimson', 'silver', 'black', 'yellowgreen', 'firebrick', 'mediumpurple', 'darkcyan', 'dodgerblue', 'greenyellow', 'brown', 'darkslateblue', 'lightseagreen', 'midnightblue'];

Я пробовал делать что-то вроде:

if ($.inArray($('.content').children().css('color'), bannedColors)) {
    $('.content').children().css('color', '');
}

Но похоже, что это не работает. Мне нужно / нужно, чтобы он видел цвет div и всех его дочерних элементов. Например:

<div class = "content">
    <p style = "color: aqua">Here is some text with color...</p>
    <div class = "inner-content">
        <p style = "color: mediumseagreen">Another set of text with another color...</p>
    </div>
</div>

Два цвета, которые есть в моем списке запрещенных цветов, должны быть удалены и заменены черным. Любые предложения будут ценны.

1. Как люди установленный цвета? Ограничьте выбор там. 2. css() будет возвращать цвета в формате RGB, поэтому сравнение с именем строки не сработает (см. jsfiddle.net/ytsj830p) 3. Это кажется сильно ошибочной идеей; что мешает мне установить запрещенный цвет с помощью Hex, RGB или RGBA?

Rory McCrossan 22.10.2018 17:26
.children() смотрит только на прямых потомков. Так что он отлично работает с элементами .content>*. Однако ваш код не будет работать, если у вас есть несколько <div class=content, где один из них разрешен - он стирает их все, если один из них неверен.
freedomn-m 22.10.2018 17:26

Я также рекомендую whitelist цветов разрешается.

freedomn-m 22.10.2018 17:28

Люди используют текстовый редактор в CMS для установки цветов. У нас нет доступа для внесения изменений в редактор, но мы (администраторы) можем добавлять скрипты в текст заголовка. Что касается добавления кода в шестнадцатеричном формате, rgb или rgba, большинство пользователей довольно неграмотны в Интернете и не знают, как вручную добавить цвет таким образом, поэтому мы действительно не особо беспокоимся об этом.

ctelle1 22.10.2018 17:38

Я думаю, вы здесь проиграете - цвета html не являются предопределенным списком, они будут составлять новые цвета на основе предоставленных символов, прочтите этот вопрос: stackoverflow.com/questions/8318911/…

freedomn-m 23.10.2018 10:04
Поведение ключевого слова "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) для оценки ваших знаний,...
0
5
43
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Ваш текущий код работает только с первым дочерним элементом '.content', вы можете использовать метод 'each' для перебора всех дочерних элементов, например:

$('.content').find('*').each( function ()
{
    if ($.inArray($(this).css('color'), bannedColors)) {
        $(this).css('color', '');
    }
}

Это пройдет через всех дочерних элементов, а также проверит и установит их цвет CSS.

Взгляните еще раз - код OP работает со всеми прямыми дочерними элементами уже с каждым, исправление но OP влияет на всех из них (что ваше исправляет). Но проблема OP (насколько я понимаю) заключается в том, что он не поражает детей (и т. д.)

freedomn-m 22.10.2018 17:30

Спасибо, это исправлено.

Poul Bak 22.10.2018 17:39

Я сделал комбинацию кода Пола Бака, а также того, что заявляла свобода о том, как цвета в css() являются RGB, несмотря ни на что. Поэтому я преобразовал все названия цветов в RGB. Также в операторе if я убедился, что это правда / flase, добавив >= 0 в конце ... Спасибо всем за вашу помощь!

ctelle1 23.10.2018 17:42

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