Базовый JavaScript / jQuery: как вернуть переменную

#javascript #jquery #variables #return

#javascript #jquery #переменные #Возврат

Вопрос:

Я осмотрелся и не вижу ответа на этот вопрос, я немного новичок в JS, так что потерпите!

Я работаю над дизайном небольшого сайта, в котором используется слайдер в стиле Coda от jQuery4Designers. Частью дизайна является наличие префикса подчеркивания перед активной навигационной ссылкой. Итак, я попытался создать переменную, а затем обновить существующую функцию в JS для слайдера. Теперь это работает:

 var activeLink = $('#nav li a.selected').text();

// handle nav selection
function selectNav() {
    $(this)
        .parents('ul:first')
            .find('a')
                .removeClass('selected')
                .text(activeLink) //this ensures the non-active link has no underscore
            .end()
        .end()
        .addClass('selected')
        .text("_"   activeLink); //this adds the underscore to the active link
}
  

Проблема, с которой я сталкиваюсь, заключается в том, что это делает каждую ссылку исходной активной ссылкой Я полагаю, что переменная не обновляется для отображения новой a.selected . Итак, если моей первой активной ссылкой была «Item One», то в итоге весь список будет отображать «Item One» для каждого li

Пожалуйста, кто-нибудь может сказать мне, как этого добиться, поскольку я не уверен, как действовать дальше.

Заранее спасибо, пожалуйста, дайте мне знать, если я смогу предоставить какую-либо дополнительную информацию.

Джордж

Ответ №1:

Ну, вы устанавливаете activeLink значение «Элемент один», а затем присваиваете его каждому элементу ul:first a . Это то, что делает ваш код.

Вместо этой переменной рассмотрите возможность динамической настройки существующего значения каждого элемента, используя тот факт, что вы можете предоставить .text() функцию:

 // handle nav selection
function selectNav() {
    $(this)
        .parents('ul:first')
            .find('a')
                .removeClass('selected')
                .text(function(index, text) {
                    return text.replace(/^_/, '');
                }) //this ensures the non-active link has no underscore
            .end()
        .end()
        .addClass('selected')
        .text(function(index, text) {
            return "_"   text;
        }); //this adds the underscore to the active link
}
  

Непроверено. Может содержать ошибки.

Комментарии:

1. Эй, извините за задержку с моим ответом! Спасибо за предложение, попробую это как можно скорее! Концепция имеет смысл (что меня обнадеживает !!). Еще раз спасибо

2. Только что опробовал код, который вы предложили Малаку, и, похоже, он работает нормально (ожидается полное тестирование)! Большое спасибо. Одна вещь, которую я изо всех сил пытаюсь понять, — это возврат внутри функции, в частности ‘text.replace(/^_/, «);’ Но я уверен, что после дальнейшего чтения это придет ко мне. Еще раз спасибо — очень признателен!!!

3. @Sheixt: Нет проблем. То, что я возвращаю, является результатом String.replace(<regex>, <replacement>) функции, заменяющей экземпляры _ , найденные в начале строки ( ^ ), на пустую строку '' ; то есть, удаляя единственное начальное подчеркивание, если оно там есть.

4. ты легенда! Спасибо, что написали это для меня.

Ответ №2:

Правильно, сохранив ActiveLink в 1-й строке, вы сохранили текущий выбранный li.

Просто переместите «var ActiveLink …..» внутрь функции selectNav().

Комментарии:

1. Он по-прежнему присваивает эту переменную каждой ссылке. Изменение ее значения этого не исправит.

Ответ №3:

Возможно, я запутался в вашем вопросе, но, насколько я могу, я думаю, это поможет

 function selectNav() {
    $(this)
        .parent('li')
        .find('a')
        .addClass('selected')
        .text("_"   activeLink)
        .parent('li')
        .siblings('li')
        .find('a')
        .removeClass('selected')
        .text(activeLink)

}
  

Я надеюсь, что это поможет