У меня есть на моем собственном сайте некоторые ссылки на 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);
});
});
Я бы посмотрел на 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(). Возможно, это облегчает ваш сценарий.
Запустите быстрый чек, прежде чем добавлять:
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);
});
}