Jquery e筛选、排序和偏移量(已显示的记录数)。这允许您查询数据,这样您就可以一致地获取与筛选器相关的下一条记录,而无需重复,并且还可以知道何时没有结果
必须同时具有这两个属性Jquery e筛选、排序和偏移量(已显示的记录数)。这允许您查询数据,这样您就可以一致地获取与筛选器相关的下一条记录,而无需重复,并且还可以知道何时没有结果,jquery,ajax,lazy-loading,Jquery,Ajax,Lazy Loading,必须同时具有这两个属性 如果两者都需要,那么您的解决方案本质上将是复杂的。此解决方案可能只值得在连接有限的环境中考虑 您最好的选择可能是使用相同的筛选、排序、偏移模型,但随后您将计算页面中现有项的偏移量(通过计算类的元素)。您的服务器端查询可以获取所有项,直到它拥有过滤器的n个下一个,或者只添加与过滤器相关的项 在任何情况下,您可能都不会节省太多,因为每次重新应用筛选器时,您都需要检查是否有足够的项目,如果没有,则需要进行服务器调用 您也可以完全替换dom元素,但可以使用类似的框架进行部分本地数
如果两者都需要,那么您的解决方案本质上将是复杂的。此解决方案可能只值得在连接有限的环境中考虑 您最好的选择可能是使用相同的筛选、排序、偏移模型,但随后您将计算页面中现有项的偏移量(通过计算类的元素)。您的服务器端查询可以获取所有项,直到它拥有过滤器的n个下一个,或者只添加与过滤器相关的项 在任何情况下,您可能都不会节省太多,因为每次重新应用筛选器时,您都需要检查是否有足够的项目,如果没有,则需要进行服务器调用
您也可以完全替换dom元素,但可以使用类似的框架进行部分本地数据查询。这将有更简单的管理和会话持久性,尽管它会为你的应用程序添加一个额外的层。你有没有收到任何错误。没有错误。上面的代码可以工作,但不是最好的方法。我要求提供另一种方法来实现这一点。您是否有一个DB列用于过滤数据@Leete过滤器是自定义的帖子类型分类。您是否可以添加一个html示例或一个fiddle/代码片段来直观地了解您所面临的问题?谢谢您的回复。我正在努力理解你的意思,因此,如果可能的话,一个代码示例对这两个方面都很好。如果你对代码进行修改,我将能够对其进行编辑,以便为你提供两个选项的真实示例。好的,非常感谢你在这方面的帮助,非常感谢。希望没问题,如果你还需要什么,请告诉我。我看到你拉小提琴,但它不起作用。添加一些html并模拟ajax调用,使其看起来像在您的网站中一样(使其成为一个工作示例)@leete这里有一些文档,您可以模拟ajax请求,当然,因为问题是关于前端的,所以您可以使用数据属性模拟静态ajax调用,如文档所示:。下面是一个JSFIDLE ajax工作示例:。
jQuery( function( $ ) {
var $divs = $('.box');
//filter multiple divs on select
var $selects = $('.filter_dd').on('change', function() {
var css_list_array = [];
$selects.each(function(index){
if ($(this).has('option:selected')){
if( $(this).val() !== '' ) {
var css = '.' + $(this).val();
var found = $.inArray(css, css_list_array);
if(found < 0) {
//if not already in array - add it
css_list_array.push(css);
}
}
}
});
var css_string = css_list_array.join('');
console.log(css_string);
var $el = $(css_string); //selected CSS names
console.log($divs); //divs not being selected as this is empty
$divs.removeClass('is-animated').fadeOut().promise().done(function()
{
if(css_string == null || css_string==''){
$divs.addClass('is-animated').fadeIn();
} else {
$el.addClass('is-animated').fadeIn();
}
});
});
});
jQuery(document).ready(function($) {
$(window).scroll(function() {
var that = $('#loadMore');
var page = $('#loadMore').data('page');
var css_select = $('#loadMore').data('css');
var newPage = page + 1;
var ajaxurl = $('#loadMore').data('url');
var docViewTop = $(window).scrollTop();
var docViewBottom = docViewTop + $(window).height();
var elemTop = $('#loadMore').offset().top;
var elemBottom = elemTop + $('#loadMore').height();
if( $('#no-more').length == 0) {
//check if scrolled to 'load more' element
if ((elemBottom <= docViewBottom) && (elemTop >= docViewTop)) {
if (typeof loading != 'undefined' && loading) return;
loading = true;
$('#resource_spinner').show();
$.ajax({
url: ajaxurl,
type: 'post',
data: {
page: page,
action: 'resources_load_more'
},
error: function(response) {
console.log(response);
},
success: function(response) {
if (response == 0) {
//check if any more post
if ($("#no-more").length == 0) {
$('#ajax-content').append('<div id="no-more" style="text-align:center;font-size:22px;font-weight:bold"><p>No more posts to load.</p></div>');
}
$('#loadMore').hide();
$('#resource_spinner').hide();
} else {
$('#loadMore').data('page', newPage);
$('#ajax-content').append(response);
}
},
complete: function(){
$('#resource_spinner').hide();
loading = false;
$divs = $('#ajax-content').find(".box");
if(css_select){
console.log('ajax'+ css_select);
$divs.not(css_select).hide();
}
}
});
}
}
});
});