Базовый JavaScript / jQuery: как вернуть переменную - PullRequest
0 голосов
/ 07 апреля 2011

Я осмотрелся и не вижу ответа на этот вопрос, я новичок в 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. Так что, если моей первой активной ссылкой было «Элемент Один», в конечном итоге весь список отображал «Элемент Один» для каждого li

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

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

George

Ответы [ 3 ]

1 голос
/ 07 апреля 2011

Ну, вы устанавливаете activeLink на "Item One", а затем даете его каждому элементу 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
}

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

0 голосов
/ 07 апреля 2011

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

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

}

Надеюсь, это поможет

0 голосов
/ 07 апреля 2011

Вы правы, сохранив activeLink в 1-й строке, вы сохранили текущий выбранный li.

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

...