jQuery按两个变量过滤,其中一个可能未定义
jquery filter by two variables & one of them maybe undefined
我正在编写一些jquery代码,根据类和数据属性过滤li项目。这是代码:http://pastebin.com/14eLwYWP
问题是,当其中一个变量未定义时(当用户第二次单击以禁用过滤器时发生),它不会显示任何内容。我想知道这个问题是否有任何其他解决方案,而不是为每个案例编写代码。
我的意思是,情况很简单,每个()仅在当前城市和当前年龄都有值时才过滤。但是当其中一个未定义时,我想显示仅由另一个变量过滤的 li-items。我不知道怎么写,但我认为主要问题就在那里:
$('ul.the_loop').children('li').each(function() {
if ($(this).data('age') == 'post_' + currentAge && $(this).hasClass("tag-" + currentCity)) {
$(this).show();
} else if (currentAge == undefined || currentCity == undefined) {
//don't know what to do there, both with logic and code...
} else {
$(this).hide();
}
});
希望你们能帮助我;)
祝你有美好的一天,干杯!
编辑:因为这段代码,虽然很愚蠢,但有效...
$('ul.the_loop').children('li').each(function() {
if ($(this).data('age') == 'post_' + currentAge && $(this).hasClass("tag-" + currentCity)) {
$(this).show();
} else if (currentAge == undefined && $(this).hasClass("tag-" + currentCity)) {
$(this).show();
} else if ($(this).data('age') == 'post_' + currentAge && currentCity == undefined) {
$(this).show();
} else if (currentAge == undefined && currentCity == undefined) {
$(this).show();
} else {
$(this).hide();
}
});
但必须有更优雅的方式来做到这一点......
您正在检查相等性,因此当currentAge
未定义时,筛选器会中断,因为没有元素的年龄刚好为 "post_"
,之后没有年龄值。(如您所知)因此,如果您使用 indexOf 来检查字符串是否包含短语 "post_"+currentAge
那么它不会中断,因为所有年龄属性都以 "post_"
开头。indexOf 函数将返回子字符串在字符串中出现的位置的索引,如果找不到子字符串,则返回 -1。 这个想法对于 currentCity
和 "tag-"
是相同的,但是我们需要一个字符串来进行比较,所以与其hasClass
而只是使用 .attr('class')
代替,所以它的
function globalFilter(currentCity, currentAge) {
$('ul.the_loop').children('li').each(function () {
if ($(this).data('age').indexOf('post_' + currentAge) > -1 && $(this).attr('class').indexOf("tag-" + currentCity) > -1) {
$(this).show();
} else {
$(this).hide();
}
}
编辑:如果要动态更改元素的类,则可能需要使用.prop('class')
而不是.attr
相关文章:
- 变量转换为另一个“未定义”的变量
- getDataAsJSON()在PHP中是一个未定义的函数,但许多解释如何使用JSONP的网站都说要使用它
- 所以这是说我的法定对象中有一个未定义的变量
- 为什么在这个数组的末尾会有一个未定义的
- 为什么我得到一个未定义的回报
- Router.use()需要中间件函数,但得到了一个未定义的函数
- 使用jQuery'在数组中循环;s中的每一个都会在生成字符串时在开头产生一个未定义的值
- 如果定义了值,为什么会得到一个未定义的值?使用 eval()
- 无论如何,在Visual Studio智能感知中定义一个未定义的对象
- 角度过滤器分组依据过滤器返回一个“未定义”字段
- 如果我在 Filter() 函数中使用索引,我会得到一个未定义的引用错误吗?
- 另一个未定义的JavaScript问题
- 我得到一个未定义而不是文件名
- 为什么我的 push() 方法不断在我的数组中插入一个“未定义”的元素
- addEventListener 使用 for 循环给了我一个未定义的结果
- Promise.all 在完成之前返回一个未定义和解析的数组
- Angular JS给出了一个未定义的函数错误
- 我得到一个未定义的索引
- JS说我有一个未定义的对象.真的需要一些帮助来解决这个问题吗
- Ajax 调用给了我一个未定义 - 未定义的错误