Js — добавить значение к элементу CSS

#javascript #css

#javascript #css

Вопрос:

Это кажется таким простым, но оно не работает (не определено).

Я установил переменную <ul> , которая является дочерним элементом <div> элемента «feature_tabs_indicators». Функция pBoxShadowProperty получает свойство boxShadow, поддерживаемое текущим браузером.

И последний оператор просто устанавливает свойство pBoxShadowProperty равным 0, то есть переопределяет свойство CSS set Box-Shadow .

Может кто-нибудь, пожалуйста, объяснить, что я делаю не так здесь, в последнем утверждении?

Лучшие,

 var iActiveNo = 0;
var eTabInd = document.getElementById ("feature_tabs_indicators").children[0];
var pBoxShadowProperty = getSupportedCSSproperty(["boxShadow", "mozBoxShadow", "webkitBoxShadow"]);

function getSupportedCSSproperty (propertyArray)
{
    var root = document.documentElement;
    for (var i = 0; i < propertyArray.length; i  )
    {
        if (typeof root.style[propertyArray[i]] === "string")
        {
            return propertyArray[i];
        }
    }
}

iActiveNo = iActiveNo   1;
eTabInd.children[iActiveNo - 1].style[pBoxShadowProperty] = "";
  

Вот jsfiddle, нажмите светло-зеленую кнопку «rght» в правом верхнем углу.

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

1. Не могли бы вы уточнить, что именно не работает?

2. Только что вставил код jsfiddle @ZenMaster, чтобы уточнить, свойство box shadow не задается динамически. Я установил тень окна с помощью CSS. Когда пользователь нажимает зеленую кнопку, тень окна должна быть удалена.

3. Что должно произойти? В любом случае — у вас есть ошибки в этой скрипке — см. Консоль. Строка: var pBackgroundColorProperty = eStyle.backgroundColor //[pBoxShadowProperty]; не заканчивается точкой с запятой, а затем интерпретируется как функция из-за (..) в следующей строке (я думаю). Если добавлена точка с запятой — кажется, все работает.

4. Отличная находка. Спасибо ZenMaster. Точка с запятой была проблемой с самого начала… Я случайно поместил его в конец комментария, а не раньше…

Ответ №1:

Я думаю, я понял, в чем ваша проблема. Вы используете здесь:

 iActiveNo = iActiveNo   1;
  

что-то, что не было определено в вашем опубликованном коде. Однако у вас есть:

 var iActive = 0;
  

что, я думаю, на самом деле должно было быть:

 var iActiveNo = 0;
  

в противном случае в вашем коде есть ошибка JS (во всяком случае, в том виде, в котором она опубликована).

Кроме этого (то есть, если вы намеревались удалить 1-й <li> элемент из <ul> элемента и удалить его box-shadow свойство CSS) — ваш код просто прекрасен.

Редактировать

Чувак, какой беспорядок .. 🙂 Вот JSFiddle, который я немного исправил. Ниже приводится объяснение.

В этом JSFiddle происходит несколько вещей, которые следует исправить, прежде чем мы перейдем к реальной проблеме.

У вас есть ошибки в этой скрипке — см. Консоль. Строка:

 var pBackgroundColorProperty = eStyle.backgroundColor //[pBoxShadowProperty];
  

не заканчивается точкой с запятой, а затем интерпретируется как функция из-за (..) в следующей строке (я думаю) — что (по крайней мере, для меня) приводит к ошибке в консоли JS. Если добавлена точка с запятой — ошибка исчезла.

Дополнительно… Есть строка:

console.log (eTabInd.children[iActiveNo-1].style.pBoxShadowProperty);

который печатает ваш undefined и именно то, что обсуждалось ниже, и должно быть

 console.log (eTabInd.children[iActiveNo-1].style[pBoxShadowProperty]);
  

который затем печатает пустую строку.

Более того, при печати ваша pBoxShadowProperty переменная содержит boxShadow строку. Что, конечно, не является допустимым свойством CSS, с которым я знаком. Итак, это:

 eTabInd.children[iActiveNo - 1].style[pBoxShadowProperty] = "";
  

ничего не сделает.

Теперь перейдем к сути проблемы…

 eTabInd.children[iActiveNo-1].style
  

для начала у него нет свойства box-shadow, потому что вы не поместили его в style атрибут <li> элемента. Оно помещается в <li> элемент благодаря достоинствам этой последовательности CSS-селекторов: #feature_tabs_indicators ul #ind_bt .

Теперь, поскольку вы хотели style атрибут — вы не получите вычисляемый стиль, к которому применяется приведенная выше последовательность CSS-селекторов. Таким образом, вы не сможете его удалить.

Что вы могли бы сделать, так это создать другой класс, у которого нет box-shadow свойства, и заменить им свой оригинал c_ind .

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

1. спасибо @ZenMaster. Это была опечатка, она правильно определена в коде. Я загружу его в jsfiddle и опубликую код.

2. Правильный ответ содержится в мини-комментарии к вопросу ZenMaster.

3. @SalmanKhan Боюсь, это еще не все, мой друг. Смотрите Обновление выше.

4. Чувак, ты крут! Миллион и одна благодарность за разъяснение мастера Дзен. Тем не менее, я думаю, что в приведенном выше есть несколько ошибок. boxShadow — это js-версия свойства Box-shadow, и оно действительно работает. Да, это не работает, по неизвестной мне пока причине, когда вы вставляете значение = «», замена «» на «0 0 0 прозрачный» работает. Я не уверен, что следую объяснению в третьем абзаце снизу, но вот что происходит в моем коде. Элемент списка CSS находится во внешнем файле, который заменяется встроенным CSS, написанным Js (в данном случае boxShadow).

5. Функция getSupportedCSSproperty получает, какой синтаксис имеет отношение к браузеру пользователя. Результирующая присваивается переменной pBoxShadowProperty, которая сама связана с атрибутом стиля элемента. Одна ошибка, которую я только что обнаружил, заключалась в синтаксисе boxShadow . Я извлекаю свойство backgroundColor и присваиваю его свойству pBackgroundColorProperty, которое было бы в формате ‘rgb ()’, однако, поскольку свойство boxShadow требует ‘x x x rgb ()’, мне нужно вставить Xs, чего я не сделал. Теперь, когда у меня есть, он прекрасно работает с огромной благодарностью вам. Еще раз спасибо за отличную помощь!

Ответ №2:

похоже, вы неправильно установили значение, как это должно быть

 eTabInd.children[iActiveNo - 1].style.pBoxShadowProperty = "";
  

Доза, которая помогает или доза все равно возвращает 0?

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

1. pBoxShadowProperty является переменной и, как таковая, должна быть доступна через [] — так же, как это сделал OP. Ваш способ не сработает.

2. @ZenMaster true это просто вернет свойство css

3. ZenMaster прав, это не так, потому что style не является объектом, свойство которого (pBoxShadowProperty) устанавливается.

4. @david Нет. Что произойдет, если вы добавите новое, полностью не связанное с CSS свойство pBoxShadowProperty eTabInd.children[iActiveNo - 1].style object и присвоите ему строку (которая просто содержит некоторые значения CSS).

5. правильно, я вижу, спасибо за обновление, ребята, я не должен был пытаться ответить на вопрос, не зная точно, что не работает