Как изменить цвет меню с помощью JavaScript - PullRequest
0 голосов
/ 09 февраля 2012

Я пытаюсь сделать статическое боковое меню более динамичным, добавив к нему некоторые эффекты.

Из приведенного ниже кода я хочу, чтобы «Первый заголовок» и «Второй заголовок» отличались от их вложенных li.Я ищу цвет фона и особый текст (скажем, красный), чтобы эти стили были постоянными.С другой стороны, вложенные li (A1-B3) не должны иметь фона, и текст должен измениться с серого, если он не активен, на зеленый, если ссылка выбрана.

<ul class="sideNav">
<li class="first active"><a>First Heading</a>
<ul>
<li class="first"><a>A1</a></li>
<li><a>A2</a></li>
<li class="last"><a>A3</a></li>
</ul>
</li>   
<li class="last active"><a>Second Heading</a>
<ul>
<li class="first"><a>B1</a></li>
<li><a>B2</a></li>
<li class="last"><a>B3</a></li>
</ul> 
</li>
</ul>

Я просматривал форумы, и хотя this (), похоже, соответствует моим требованиям, мое полное отсутствие знаний js / jquery действительно мешает мне.Мы будем благодарны за любые рекомендацииЯ не знаю, что мне нужно.Поэтому любая помощь будет приветствоваться.

Ответы [ 3 ]

3 голосов
/ 09 февраля 2012

Вы можете просто использовать CSS:

ul.sideNav li a {
  color: red;
}

ul.sideNav li ul li a {
  color: grey;
}
0 голосов
/ 09 февраля 2012

Пожалуйста, обратите внимание, что это не прямой ответ на вопрос, но я чувствую, что это будет полезно для ОП и, надеюсь, других

Хотя я совершенно определенно согласен с тем, что в вашем случае вы можете наиболее просто использовать css для стилизации своих элементов (см. Ответ @ lennart для примера дочернего выбора), могут быть случаи, когда вам нужно быть более динамичным при применении стиля, вы может, конечно, использовать jquery .css() и аналогичные функции, возможно, действительно использовать старый добрый javascript, однако это обычно приводит к обходу dom, который может быть сложным даже с jquery, второй вариант - динамическое добавление таблиц стилей, что также может быть весьма эффективным третий вариант - изменить / манипулировать тегом <style>, например, у вас может быть стиль, определенный в некоторых данных json, где мы можем быть немного креативными, создать строку css и добавить ее в <style>

// turn #accordion into a simple accordion menu
// adds style to the head from json data
$(document).ready(function() {

  // hide <ul> nested in accordion
  $('#accordion').find('ul').hide();

  // add click event to accordion .heading
  $('#accordion').find('.heading').click(function(e) {
    // do not follow anchor    
    e.preventDefault();      
    // slide up any open sections
    if(!($(this).hasClass('open'))) {
      $('.open').removeClass('open').next().slideUp();
    }
    $(this).addClass('open').next().slideToggle();
  });

  // a function that parses json and
  // appends it to <style>
  function addStyleFromJson(json) {
    // turn json into normal string
    var style = JSON.stringify(json);
    // remove apostrophes, colons before {, opening and closing {}
    style = style.replace(/(")|(:(?=\{))|(^\{)|(\}$)/g, '');
    // remove commas after }
    style = style.replace(/(\}|\;),/g, function($0, $1){
    return $1 ? $1 + '' : $0;
    });
    // prepend this style with any style declared in <head>
    style = $('style').text() + style;
    // append style element to head
    $('style').text(style);  
  }

  // load some style
  $.ajax({
    url: 'http://dl.dropbox.com/u/47426368/somejson.js',
    dataType: 'jsonp',
    jsonp: false,
    jsonpCallback: 'myCallback',
    cache: true,
    success: addStyleFromJson
  });
});

в этой демонстрации мы превращаем html в меню в стиле аккордеона, затем загружаем некоторый json из удаленного местоположения и анализируем его в теге <style> (предположим, он уже есть). Как я уже говорил ранее, это, возможно, не лучший вариант, и есть много вариантов, поэтому, как я сказал в своем комментарии, вы должны действительно изучить этот материал, чтобы использовать его, он ничем не отличается от езды на велосипеде или выполнения математики. магия просто (тяжелая) работа и преданность делу :-), я надеюсь, что это демонстрирует, как вы можете использовать несколько технологий относительно просто для создания чего-то более динамичного, что, я думаю, было одной из причин появления javascript

вот демоверсия

0 голосов
/ 09 февраля 2012

Если вы хотите изменить цвета определенных вещей, вы должны действительно использовать CSS-условные выражения.Например, если я хочу, чтобы мои элементы списка имели цвет x при наведении мыши, цвет y по умолчанию и цвет z при нажатии ... мой CSS будет выглядеть следующим образом:

ul.sideNav:link,li.sideNav:link
{
color:y;
}
ul.sideNav:active,ul.sideNav:visited,li.sideNav:visited,li.sideNav:active
{
color:z;
}
ul.sideNav:hover,li.sideNave:hover
{
color:x;
}

Вы можете применить их клюбой тег, такой как anchor (), и есть множество различных условий для использования.Я бы настоятельно рекомендовал ознакомиться с HTML, DOM, CSS и JavaScript на W3Schools , у них есть много хороших руководств, которые помогут вам в этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...