#javascript #jquery #css #variables
#javascript #jquery #css #переменные
Вопрос:
Я пытаюсь установить цвет фона для переменной ID , но я не могу понять это. Должно быть, есть что-то действительно маленькое, о чем я не знаю.
Вот что у меня есть:
var abc = $dialog.data( "url" );
alert(abc)
Это предупреждает: item1
var cde = '#' abc
alert(cde)
Это предупреждение: #item1
Пока все хорошо. Теперь я пытаюсь изменить фон для этого идентификатора. Итак:
Это работает:
$(body).css('background-color', 'black');
Это не:
cde.css('background-color', 'black');
$(cde).css('background-color', 'black');
$("#" abc).css('background-color', 'black');
Все они находятся в одной и той же функции.
Что я делаю не так?
Большое спасибо
Комментарии:
1. вы пробовали только один из них???
2. На какой тип элемента следует
#item1
ссылаться?3. Да, я думал, люди смогут понять, что когда я писал все 3 варианта, я имел в виду, что я использовал один каждый раз.
4. @JamesAllardice Это <li> .. Если я просто сделаю $(«#item1»).css(‘background-color’, ‘black’); это работает нормально.
5. @jQuerybeast — Можете ли вы создать jsfiddle, который повторяет вашу проблему? На первый взгляд я не вижу ничего, что могло бы привести к тому, что
$(cde).css(...)
не будет работать.
Ответ №1:
Если вы попробуете это, сработает ли это?
$('#item1').css('background-color', 'black');
Комментарии:
1. Здесь то же самое. Это действительно работает. Но не так
$('#item' id)
2. Протестировав это так, как вы предлагаете, я обнаружил ошибку.
Ответ №2:
Единственная причина, по которой я вижу, что ваш код не работает, заключается в том, что значение, которое вы передаете в jQuery (а именно cde или «#» abc), не имеет типа «Строка».
Вы можете провести некоторый тест для этого :
var test = "#item1";
alert(test === cde);
alert(typeof(cde));
Если тип не является string, то вы могли бы просто сделать :
$(cde.toString()).css('background-color', 'black');
Комментарии:
1. Когда вы объединяете переменную со строковым литералом, вы получаете строку. Таким образом,
"#" abc
результатом будет строка. (Кроме того,typeof
— это оператор, а не метод, поэтому вам не следует заключать операнд в круглые скобки.)2. @jQuerybeast — Что
alert(typeof cde);
говорит? Я не понимаю, как это может быть чем-то иным, кроме строки, поскольку вы объединяете ее со строковым литералом («#»).3. К вашему сведению, я никогда не говорил, что это логично, просто сказал, что единственная причина, по которой я вижу, что вызовы jQuery завершаются неудачей, заключается в том, что переданный параметр не является строкой. Мне также действительно любопытен тип переменной!
Ответ №3:
Вместо использования alert()
используйте console.log()
.
alert()
имеет привычку автоматически вызывать .toString()
объекты, а также сглаживать массивы.
Я ожидаю, что происходит то, что ваша переменная abc
на самом деле не является строкой, поэтому то, что вы, вероятно, имеете, является результатом:
'#' abc.toString()
Ответ №4:
ОТРЕДАКТИРОВАНО: Как насчет принудительного преобразования его в строку, подобную этой?
$("" cde).css('background-color', 'black');
Комментарии:
1. я вроде как надеялся, что вы просто пропустили это, в противном случае код выглядит корректно.
Ответ №5:
document.getElementById('item1').style.backgroundColor='black';
это всегда работает!