jQuery - добавить / удалить str при изменении

0

У меня есть на моем собственном сайте некоторые ссылки на RSS-канал... вот так:

ALL
example.com/rss

NEWS
example.com/rss?type=1

ARTICLES
example.com/rss?type=2

На той же странице я хочу вставить некоторый фильтр... поэтому у меня есть выбор:

<select class="rss-list-platform">
<option value="">All</option>
<option value="1">Xbox</option>
<option value="2">PlayStation</option>
</select>

Я ищу код jQuery, который добавит "& platform = val" к исходной ссылке, однако, если выбрана опция "Все" на выборке... мы должны удалить "& platform = val", если таковой имеется.

В настоящее время у меня есть следующий код, но он продолжает добавлять снова и снова текст... и не удаляет его.

$(".rss-list-platform").change(function(){

        var ref_this = $(this);
        var original_str = "";

        $(".rss-list input").each(function(){

            original_str = $(this).val();
            add_str = original_str + "&platform=" + ref_this.val();

            $(this).val(add_str);
        });

    });
Теги:

2 ответа

1
Лучший ответ

Я бы посмотрел на serialize() и попытался использовать его. Он построен для того, что вы пытаетесь выполнить. Код будет выглядеть примерно так:

var url = "http://your.site/something";

$(".rss-list-platform").change(function() {
    var params = $("#id-of-form").serialize();
    $("#id-of-tag-containing-url").text(url + "?" + params);
}

Вам нужно добавить имя в тег select, чтобы это работало.

Метод serialize() работает как по форме, так и по тегам input/select/textarea. Итак, еще один пример использования - $ (": input"). Serialize(). Возможно, это облегчает ваш сценарий.

  • 0
    Не могли бы вы объяснить это немного дальше? Попытка serialize () select $ (". Rss-list-platform"). Serialize () ничего не выводит.
  • 0
    Я обновил ваш jsfiddle, чтобы он использовал serialize (). Посмотрите на это и, надеюсь, вы найдете это полезным! jsfiddle.net/PMCWw/2
1

Запустите быстрый чек, прежде чем добавлять:

original_str = this.value
    add_str = original_str + "&platform=" + ref_this.val();
    var check_str = "&platform=" + ref_this.val();
    if (this.value.indexOf(check_str) > -1) {
        //string is already there!
    } else {
        $(this).val(add_str);
    }

И удалить его, внутри вашего change

if (this.value == 1) { //1 is for All
    $(".rss-list input").each(function(){
        var index = this.value.indexOf("&platform=");

        //remove it if it exists
        if (index > -1) this.value = this.value.substring(0, index);
    });
}
  • 0
    Просто попробовал это. Не сработало. По какой-то причине продолжает добавлять текст ...
  • 0
    @ user2840318 - Просто отредактируйте, буду пробовать снова
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню