Запретить jQuery изменять цвет фона

#jquery #css

#jquery #css

Вопрос:

Я использую jQuery для изменения background-color четных строк таблицы:

 $("table tbody tr:nth-child(even)").css("background-color", "#F1F1F1");
  

Теперь я хочу установить другой цвет для одного из моих tr s в соответствии с результатом некоторых задач PHP.

 <tr
    <?php
        // Some tasks to see whether background-color should change or not
        if (yes) echo "style='background-color:#A60000;'"
    ?>
>
  

Но это не работает, поскольку jQuery переопределяет цвет и устанавливает его обратно #F1F1F1 . Есть ли какой-либо способ запретить jQuery делать это? Или я тоже должен использовать jQuery?

Комментарии:

1. Рассматривали ли вы класс CSS?

2. Вы действительно должны делать это с classes помощью, что даст вам намного больше контроля ( !important ) $("table tbody tr:nth-child(even)").addClass('even') и т.д. .

3. Какова последовательность событий здесь? Вы запускаете код jQuery на текущей странице, а затем перезагружаете страницу, чтобы получить новые строки?

4. Нет. На самом деле страница заполняется html, отображаемым php, а затем jQuery выполняет некоторые трюки.

Ответ №1:

Не используйте $.css для добавления цвета, а используйте addClass вместо этого для добавления класса в строку. В PHP также добавьте класс вместо встроенного стиля.

Затем в вашей таблице стилей вы можете соответствующим образом оформить строки:

 /* The class that is added by JQuery */
.jqueryclass {
  background-color: #F1F1F1;
}

/* The class that is added by PHP, even if jquery added a class too. */
.phpclass, .phpclass.jqueryclass {
  background-color: #A60000;
}
  

Он намного чище и более удобен в обслуживании. Вы можете позволить CSS решать, как стилизованы конкретные комбинации классов, без необходимости выполнять сложные и запутанные проверки в javascript или PHP.

И если на данный момент у вас есть файл CSS, вы можете добавить классы CSS для оформления альтернативных строк. Таким образом, он работает в браузерах, в которых отключен javascript. Со временем вы сможете полностью избавиться от кода jQuery, когда браузеры, которые не поддерживают этот стиль, исчезнут.

Ответ №2:

Просто добавьте что-то вроде

 data-nooverride
  

только после / перед атрибутом стиля.

(Вам нужно будет отредактировать следующий код, чтобы использовать каждый из них):

 var tr = $("table tbody tr:nth-child(even)");
if (tr.data('nooverride')){
    $("table tbody tr:nth-child(even)").css("background-color", "#F1F1F1");
}
  

и проверьте это с помощью вашего скрипта

Комментарии:

1. tr будет несколько, поэтому вам придется each переписать tr ‘s и проверить атрибут data для каждого.

Ответ №3:

Да, это возможно. Вам нужно как-то идентифицировать строку (возможно, путем добавления класса),

 <tr
    <?php
        if (yes) echo "class='myclass' style='background-color:#A60000;'"
    ?>
>
  

А затем измените селектор jQuery, чтобы игнорировать эту строку

 $(selector).not('.myclass').css({...});
  

Поскольку вы добавляете класс, вам, вероятно, следует добавить цвет фона как часть класса.

Ответ №4:

Вместо того, чтобы добавлять style атрибут к tr тегу, добавьте a class из вашего PHP-кода.

Затем просто измените свой селектор jQuery, чтобы не изменять tr теги, имеющие данный класс, как показано ниже (см. Документацию jQuery на :not). В этом случае вызывается класс special :

 $("table tbody tr:nth-child(even):not(.special)").css("background-color", "#F1F1F1");
  

Смотрите этот рабочий пример.

Комментарии:

1. Еще лучше: используйте классы в целом. Зачем загрязнять логику Javascript / jQuery жестко закодированными значениями стиля. Для этого и предназначены ваши таблицы стилей.

2. Верно, классы> встроенные стили.

Ответ №5:

В css, если вы добавляете «!important» после некоторого стилизации, браузер сообщает, что этот стиль имеет наивысший приоритет.

Таким образом, вы можете создать класс для него и в вашем файле css:

 .myclass{
  background-color:#A60000 !important;
}
  

Вы можете попробовать добавить его в атрибут style, но я не уверен, будет ли это работать таким образом