#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. правильно, я вижу, спасибо за обновление, ребята, я не должен был пытаться ответить на вопрос, не зная точно, что не работает