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>

我正在寻找一个将“&platform=val”添加到原始链接的jQuery代码,但是,如果选择了“All”选项......我们应该删除“&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);
        });

    });
4

2 回答 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);
    });
}
于 2013-10-02T21:02:32.300 回答
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);
}

您需要为选择标签添加一个名称才能使其正常工作。

serialize() 方法适用于表单以及输入/选择/文本区域标签。所以另一个如何使用它的例子是 $(":input").serialize()。也许这会使您的方案更容易。

于 2013-10-02T21:22:41.203 回答