jQuery: установите цвет фона css для переменной ID

#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';
  

это всегда работает!