Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jquery和knockout筛选和排序li标记_Javascript_Jquery_Asp.net Mvc_Knockout.js - Fatal编程技术网

Javascript 使用jquery和knockout筛选和排序li标记

Javascript 使用jquery和knockout筛选和排序li标记,javascript,jquery,asp.net-mvc,knockout.js,Javascript,Jquery,Asp.net Mvc,Knockout.js,我正在使用MVC4生成一个包含许多元素的动态列表。例如,此类的标记如下所示: <ul> <li class="item" data-price="1" data-categoryid="200,300,400"> <!-- further markup --> </li> <li class="item" data-price="4" data-categoryid="210,310,400"> <!-- further

我正在使用MVC4生成一个包含许多元素的动态列表。例如,此类的标记如下所示:

    <ul>
<li class="item" data-price="1" data-categoryid="200,300,400">
<!-- further markup -->
</li>
<li class="item" data-price="4" data-categoryid="210,310,400">
<!-- further markup -->
</li>
<li class="item" data-price="3" data-categoryid="220,030,430">
<!-- further markup -->
</li>
<li class="item" data-price="6" data-categoryid="250,300,410">
<!-- further markup -->
</li>
</ul>
当页面加载时,通过MVC模型从控制器操作填充上述标记的数据

我想通过这个标记实现一些我需要帮助的事情。首先,在我的页面上,我有许多复选框,对应于上面的“data categoryid”属性。例如,我有复选框200、300等。当用户选中其中任何一个复选框时,我只想显示包含数据类别ID属性中复选框值的li标记

当用户在其中选择价格时,我也有一个下拉列表,我希望li标签根据li标签中的“数据价格”属性进行订购

我正在使用jquery和knockout(渴望了解这一点),因此希望能够使用它们来实现这一点

我已将标记添加到

我必须就上述问题提出进一步的问题。如前所述,我通过控制器返回视图等进行填充。当用户向下滚动页面时,我将使用无限滚动进行服务器端调用,以返回下一个li标记列表,并将它们附加到上面。我考虑的是易于使用,在服务器上填充部分视图并返回其内容并附加到标记中

另一种方法是不通过服务器端而是通过客户端在开始时加载标记,并使用knockout绑定li标记。然而,我担心的是,通过使用这种方法,第一次加载时页面上没有任何标记,这会导致用户延迟,而且搜索引擎机器人程序也无法索引此标记。我对上述内容的理解是否正确,还是有更好的方法

var $li = $('ul li');
$('input[type=checkbox]').change(function(){
   $li.filter('[data-categoryid*='+ this.value +']').toggle(this.checked);
});

$('select').change(function(){
    $li.sort(function(a, b){
        return a.dataset.price > b.dataset.price 
    }).appendTo('ul');
});