2012-06-17 3 views
0

У меня есть панель навигации сбоку страницы и вы хотите выделить одну из нескольких записей в зависимости от параметров GET.Пытается манипулировать стилем CSS с помощью jQuery

После небольшого чтения я пришел к этому решению, но это не похоже на работу:

в .html:

<script type="text/javascript"> 
    $(document).ready(highlight_me()); 
</script> 

функции JS:

function highlight_me() { 
    // ensure all links have class 'regular' 
    document.links.className = 'regular'; 
    // determine which link to highlight 
    var id = 'home'; 
     switch (querystring('view')) { 
      case "set": 
       id = 'settings'; 
       break; 
      case "mc": 
       id = 'messages'; 
       break; 
      default: 
       id = 'home'; 
     } 
    // highlight link 
    document.getElementById(id).className = 'highlight'; 
} 

function querystring(key) { 
    // extract GET-value for key 
    var re = new RegExp('(?:\\?|&)' + key + '=(.*?)(?=&|$)', 'gi'); 
    var r = [], m; 
    while ((m = re.exec(document.location.search)) != null) r[r.length] = m[1]; 
    return r; 
} 

классы CSS:

a, a.regular, a:visited { 
    color: #f0ce96; 
} 

a:active, a:hover, a.highlight { 
    text-decoration: underline; 
    color: #ffeebb; 
} 

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

ответ

3

Вы не передаете параметр «id» при вызове функции highlight_me.

+0

параметр идентификатор не является обязательным - если ни один или кроме указанных из них не заданы, идентификатор по умолчанию для «дома» –

+0

, ИС, кажется, правы, я не знаю много о регулярных выражениях, но вы отлаживали функцию querystring, чтобы проверить, делает ли она то, что вы хотите? – Gori

+0

Ах ... мог бы подумать об этом. Это, где проблема, кажется, - я просто скопировал эту функцию из какого-то места, потому что кто-то заявил, что она сработала, поэтому у меня фактически нет реальной идеи, что этот фрагмент кода наконец-то делает ... –

0

функция $(highlight_me()); требуется параметр id, который не является источником питания, когда вы вызываете эту функцию. И положите свою функцию внутри document.ready.

$(document).ready(function() { 
    // put all your function here. 
}); 
+0

Как я уже сказал в ответ на предложение Папайи, параметр 'id' является необязательным по умолчанию для« home », если он не указан или не определен (хотя, по крайней мере, моя IDE также так говорит). Но положив это так: '$ (document) .ready (highlight_me)' по крайней мере сделал работу «домашней» части –

1

Любая причина, по которой вам необходимо id как параметр? Вы не используете его нигде внутри функции. Не нужно ли звонить querystring? В этом случае вам не нужно делать часть if(id.length). Установите по умолчанию id по номеру 'home', а затем оператор switch, чтобы соответствующим образом изменить переменную.

Вот что я говорю:

function highlight_me() { 
// ensure all links have class 'regular' 
document.links.className = 'regular'; 
// Set id to home by default 
var id = 'home'; 
    switch (querystring('view')) { 
     case "set": 
      id = 'settings'; 
      break; 
     case "mc": 
      id = 'messages'; 
      break; 
     default: 
      id = 'home'; 
    } 
// highlight link 
document.getElementById(id).className = 'highlight'; 
} 
+0

Хорошая точка для простоты функции, но я планировал ... да, что я на самом деле планировал в первом случае? ;) Но, к сожалению, реальная проблема уже отслеживается, когда функция querystring не работает должным образом, так что это не помогает в этом: / –

Смежные вопросы