UIkit 3 的过滤器组件:使用 URL 哈希设置活动过滤器 - 无法使用 JS 更改活动过滤器

aci*_*ms4 2 javascript filtering getuikit

我正在尝试将哈希值传递给 URL 以设置 UIkit 过滤器。

<div uk-filter="target:.js-filter">
    <ul>
        <li class="uk-active" uk-filter-control><a href="#">All</a></li>
        <li uk-filter-control="filter:[data-color='blue'];"><a href="#"></a></li>
        <li uk-filter-control="filter:[data-color='white'];"><a href="#"></a></li>
    </ul>
    <ul class="js-filter">
        <li data-color="blue"></li>
        <li data-color="white"></li>
    </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

因此,例如,如果我访问http://example.com/#white,该内容仅显示白色项目(并且“白色”过滤器控件处于活动状态)。

我找不到任何关于如何使用 UIkit 3 实现这一目标的明确示例(这是关于 UIkit 2 的)。对于像我这样的菜鸟来说,文档似乎不清楚,因为不清楚targetselActive选项所指的是什么。但是,我正在尝试以下操作:

<script>
document.addEventListener("DOMContentLoaded", function(event){
    hash = document.location.hash;
    console.log("Hash: " + hash);

    if ( hash !== "" ) {
        var filter = document.querySelector('.js-filter');

        UIkit.filter( filter, {
            target: 'li [data-color:' + hash + ']',
            selActive: true,
        });
    }
});
</script>
Run Code Online (Sandbox Code Playgroud)

但这会引发“未捕获类型错误:无法读取 null 的属性‘子级’”错误。

任何帮助,将不胜感激。:)

小智 6

<div uk-filter="target:.js-filter">
<ul id="filter-bar">
    <li class="uk-active" uk-filter-control><a href="#">All</a></li>
    <li uk-filter-control="filter:[data-color='blue'];"><a href="#"></a></li>
    <li uk-filter-control="filter:[data-color='white'];"><a href="#"></a></li>
</ul>
<ul class="js-filter">
    <li data-color="blue"></li>
    <li data-color="white"></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

      document.addEventListener("DOMContentLoaded", function(event){
        hash = document.location.hash;
        console.log("Hash: " + hash);

        if ( hash !== "" ) {
            var filter = document.querySelector('.js-filter');
            var filterBar= document.querySelector('#filter-bar');
            var activeFilter= document.querySelector('li [data-color:' + hash + ']');
            UIkit.filter( filterBar, {
                target: filter,
                selActive: activeFilter,
            });
        }
    });
Run Code Online (Sandbox Code Playgroud)

我听得太晚了)但是试试这个代码。您需要首先传递过滤器组件而不是列表。