【问题标题】:URL hash to set select option用于设置选择选项的 URL 哈希
【发布时间】:2019-12-06 16:04:23
【问题描述】:

我在一个包含 3 个选择下拉列表的页面上有一个过滤器。当每个下拉列表中的一个值被选中时,它就会被添加到 URL 中,所以它现在看起来像这样:

domain.com/page#filter-1=.class1&filter-2=.class2&filter-3=.class3&

filter-1 是 select 的 id,因此 filter-1=.class1 应该在 filter-1 select 中选择选项值 .class1 ,对于每个 select 也是如此。但我就是不知道怎么做。

我的 URL 哈希在一个名为 hashFilter 的变量中。

一个简化的例子

<select class="filter_select" id="filter-1" role="group" data-filter-group="filter-1">
    <option class="filter_select_option" data-filter="">Show all</option>
    <option class="filter_select_option" data-filter=".class-1" value=".class-1">Option 1</option>
    <option class="filter_select_option" data-filter=".class-2" value=".class-2">Option 2</option>
    <option class="filter_select_option" data-filter=".class-3" value=".class-3">Option 3</option>
    <option class="filter_select_option" data-filter=".class-4" value=".class-4">Option 4</option>  
</select>

<select class="filter_select" id="filter-2" role="group" data-filter-group="filter-2">
    <option class="filter_select_option" data-filter="">Show all</option>
    <option class="filter_select_option" data-filter=".class-1" value=".class-1">Option 1</option>
    <option class="filter_select_option" data-filter=".class-2" value=".class-2">Option 2</option>
    <option class="filter_select_option" data-filter=".class-3" value=".class-3">Option 3</option>
    <option class="filter_select_option" data-filter=".class-4" value=".class-4">Option 4</option>  
</select>

<select class="filter_select" id="filter-3" role="group" data-filter-group="filter-3">
    <option class="filter_select_option" data-filter="">Show all</option>
    <option class="filter_select_option" data-filter=".class-1" value=".class-1">Option 1</option>
    <option class="filter_select_option" data-filter=".class-2" value=".class-2">Option 2</option>
    <option class="filter_select_option" data-filter=".class-3" value=".class-3">Option 3</option>
    <option class="filter_select_option" data-filter=".class-4" value=".class-4">Option 4</option>  
</select>

我可以设置一个选择,例如:

jQuery("#filter-1").val('class-1');

但我不知道如何动态地使用多个选择。 任何帮助表示赞赏。

谢谢。

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    如果您想要特定过滤器的值,请在选择器中使用id 属性

    jQuery("#filter-1 option:selected").text()
    

    如果您想要所有过滤器的所有值,请在选择器中使用class 属性

    jQuery(".filter_select option:selected")
    

    如果您想根据 url 从选择中动态选择一个值,则必须首先解析 url,然后使用解析的值来设置选择。例如:

    # naievely parse the url
    const map = window
      .location
      .hash
      .slice(1,-1)
      .split('&')
      .reduce((map, element) => {
        const [key, val] = element.split('=');
        map[key] = val;
        return map;
      }, {})
    
    # set selection
      for (const [filterId, value] of Object.entries(map))
        jQuery(`#${filterId}`).val(value);
    

    【讨论】:

    • 或者在"#filter-1"选择器上使用.val()方法。
    • 也许我解释得不够清楚。我需要根据 URL 哈希设置所有 3 个选择,但我不知道如何。在 PHP 中,我会构建一个数组并对其进行迭代,但我的 javascript 技能不是很好...
    • @Dyvel:这不是你原来的问题。一旦你掌握了这些值,你就可以构造一个代表你需要的地址的字符串。
    • @Mr.我就是我试图在这句话中解释的内容:“filter-1 是选择的 id,因此 filter-1=.class1 应该在 filter-1 选择中选择选项值 .class1 ,对于每个选择也是如此。但是我只是不知道怎么做。”但我确实在 URL 中有值,并且在一个带有添加到 URL 的值的 var 中。示例:"filter-1=.class1,filter-2=.class2,filter-3=.class3,"
    • @Dyvel:我已经更新了我的答案。希望对你有帮助
    猜你喜欢
    • 2015-04-26
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    相关资源
    最近更新 更多