В firefox, как изменить цвет текста в ячейке дерева с помощью javascript

ЗАДНИЙ ПЛАН: У меня есть следующий фрагмент XUL

<tree id = "treeToChange" flex = "1">
  <treecols>
    <treecol label = "First Column" id = "c1" flex = "1"/>
    <treecol label = "Second Column" id = "c2" flex = "1"/>
  </treecols>
  <treechildren>
    <treeitem>
      <treerow>
        <treecell label = "Data for Column 1"/>
        <treecell label = "Data for Column 2"/>
      </treerow>
    </treeitem>
  </treechildren>
</tree>

и следующий фрагмент css

tree {  font-size: 120%; color: green;}

Это приводит к тому, что данные моего столбца отображаются зеленым текстом.

У меня много таких древовидных объектов на XUL странице

ВОПРОС: В firefox, в ответ на событие щелчка, которое вызывает подпрограмму javascript, как мне установить данные для объекта treeToChange в столбце 1 красным цветом, а данные в столбце синего цвета?

Интересно, почему вы думаете, что этот фрагмент можно называть HTML ...

artificialidiot 14.01.2009 22:21

Вы правы, это действительно фрагмент XUL.

Noah 14.01.2009 22:31
Поведение ключевого слова "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
2
2 387
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Свойство style элемента DOM содержит все объявления CSS для этого элемента. Схема именования немного отличается (camelCaps вместо тире), но в остальном точно такая же.

 element.style.color = 'blue';

Вы можете узнать больше о свойстве style в Руководство Mozilla javascript.

Следует отметить, что выбор элемента можно значительно упростить, если использовать фреймворк, например jQuery, который позволяет использовать синтаксис стиля CSS: docs.jquery.com/Selectors

Sampson 14.01.2009 22:43

Примечание: это не работает с текстом ячейки дерева, поскольку на самом деле он не является частью элемента DOM.

Noah 17.01.2009 19:49

Это работает с древовидной ячейкой, как и любой другой элемент DOM - developer.mozilla.org/en/XUL/treecell (прочтите унаследованные свойства внизу)

Eran Galperin 17.01.2009 23:32

Чтобы установить цвет любого элемента, вы можете использовать:

function changecolour(elid, nc) {
    document.getElementById(elid).style.color = nc;
}

Так

changecolour("c1", "red");
var x = document.getElementsByClassName("cell");
for ( var i = 0; i < x.length; i ++ ) {
    changecolour(x, "blue");
}

изменит цвет данных, если вы добавите класс ячейки в ячейки (чтобы избежать конфликта с другими деревьями в документе)

Кстати, здесь - это document.getElementsByClassName:

function getElementsByClassName(className, tag, elm){
var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)");
var tag = tag || "*";
var elm = elm || document;
var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
var returnElements = [];
var current;
var length = elements.length;
for(var i=0; i<length; i++){
    current = elements[i];
    if (testClass.test(current.className)){
        returnElements.push(current);
    }
}
return returnElements;

}

Очевидно, Ной нацелен только на Firefox, учитывая, что фрагмент НЕ HTML, а XUL. Итак, getElementsByClassName уже поддерживается.

artificialidiot 14.01.2009 22:19

Это работает хорошо, однако я понял, что мне нужно быть немного более конкретным, поскольку на странице XUL много деревьев. Как выбрать только то дерево, с которым я работаю? (Также вам нужно переместить последний} обратно в блок кода)

Noah 14.01.2009 22:39

Примечание: это не работает с текстом ячейки дерева, поскольку на самом деле он не является частью элемента DOM.

Noah 17.01.2009 19:50

@Noah: Есть ли в Firefox встроенная функция getElementsByClassName? Если да, то это приятный сюрприз! :)

Lucas Jones 23.01.2009 23:15
Ответ принят как подходящий

Оказывается, element.style.color влияет только на заголовки столбцов, а в firefox на ячейки в древовидной структуре можно повлиять только путем кодирования представления данных.

Далее следуют фрагменты кода:

// DatabaseTreeView: Create a custom nsITreeView
DatabaseTreeView: function(aTableData, aColumns) {

this.getCellProperties   = function(row,col,props){
var aserv=Components.classes["@mozilla.org/atom-service;1"].getService(Components.interfaces.nsIAtomService);
props.AppendElement(aserv.getAtom("color_"+col.id));
props.AppendElement(aserv.getAtom("font_"+col.id));
};

...

и измените CSS следующим образом

treechildren::-moz-tree-cell-text(color_c1){ color:DarkGreen}
treechildren::-moz-tree-cell-text(color_c2){ color:Navy}
treechildren::-moz-tree-cell-text(font_c1){ font-size:120%}
treechildren::-moz-tree-cell-text(font_c1){ font-size:150%}

Я надеюсь, что это поможет кому-то еще в будущем

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