Javascript 如何使用jquery在html表中搜索范围?

Javascript 如何使用jquery在html表中搜索范围?,javascript,jquery,html,Javascript,Jquery,Html,我有这样一个表结构: City | %age | Year NY | 57% - 95% | 2011 NY | 30% - 65% | 2012 FL | 50% - 60% | 2012 AL | 10% - 50% | 2014 $("li:withinNum(50)").addClass('bold'); 我可以使用以下代码在文本中搜索: jQuery('#tblSearch tr td.td5:containsNoCase(\'' +

我有这样一个表结构:

City |    %age   | Year 
NY   | 57% - 95% | 2011
NY   | 30% - 65% | 2012
FL   | 50% - 60% | 2012
AL   | 10% - 50% | 2014
$("li:withinNum(50)").addClass('bold');
我可以使用以下代码在文本中搜索:

jQuery('#tblSearch tr td.td5:containsNoCase(\'' + jQuery('#txtSearch').val() + '\')').parent().show();

jQuery.expr[":"].containsNoCase = function (el, i, m) {
    var search = m[3];
    if (!search)
    return false;
    return eval("/" + search + "/i").test($(el).text());
};
但我不知道如何搜索范围,比如若用户想要搜索60%,那个么如何才能得到前三个结果

提前谢谢!
如有可能,请参阅副本。谢谢

我滚动了一个数字检查器

jQuery.expr[":"].withinNum = function (el, i, m, num) {
    str = $(el).text();
    var min = parseInt(str, 10),
        max = parseInt(str.substr(-4), 10);
    return m[3] >= min && m[3] <= max;
};
演示:

也可作为一个班轮:

jQuery.expr[":"].withinNum = function(el, i, m, num){ str = $(el).text(); return m[3] >= parseInt(str, 10) && m[3] <= parseInt(str.substr(-4), 10); };
jQuery.expr[":"].withinNum=function(e,i,m){var v=$(e).text().match(/\d+/g)||'';return m[3]>=+v[0]&&m[3]<=+v[1];};
演示:

也可作为一个班轮:

jQuery.expr[":"].withinNum = function(el, i, m, num){ str = $(el).text(); return m[3] >= parseInt(str, 10) && m[3] <= parseInt(str.substr(-4), 10); };
jQuery.expr[":"].withinNum=function(e,i,m){var v=$(e).text().match(/\d+/g)||'';return m[3]>=+v[0]&&m[3]<=+v[1];};

我滚动了一个数字检查器

jQuery.expr[":"].withinNum = function (el, i, m, num) {
    str = $(el).text();
    var min = parseInt(str, 10),
        max = parseInt(str.substr(-4), 10);
    return m[3] >= min && m[3] <= max;
};
演示:

也可作为一个班轮:

jQuery.expr[":"].withinNum = function(el, i, m, num){ str = $(el).text(); return m[3] >= parseInt(str, 10) && m[3] <= parseInt(str.substr(-4), 10); };
jQuery.expr[":"].withinNum=function(e,i,m){var v=$(e).text().match(/\d+/g)||'';return m[3]>=+v[0]&&m[3]<=+v[1];};
演示:

也可作为一个班轮:

jQuery.expr[":"].withinNum = function(el, i, m, num){ str = $(el).text(); return m[3] >= parseInt(str, 10) && m[3] <= parseInt(str.substr(-4), 10); };
jQuery.expr[":"].withinNum=function(e,i,m){var v=$(e).text().match(/\d+/g)||'';return m[3]>=+v[0]&&m[3]<=+v[1];};

这将显示该范围内的所有值,并隐藏其他值

function filterByPercentVal(val) {
    $('tbody tr').show().filter(function () {
        var rangeText = $.trim($(this).find('td').eq(1).text()).replace(/%|\s/g, ''),
            rangeLimits = rangeText.split('-');
        return !(val>= parseInt(rangeLimits[0], 10) && val<= parseInt(rangeLimits[1], 10));

    }).hide();
}
/* usage */
filterByPercentVal(55);
使用表作为标记,后续调用使其可重用,无需任何更改


这将显示该范围内的所有值,并隐藏其他值

function filterByPercentVal(val) {
    $('tbody tr').show().filter(function () {
        var rangeText = $.trim($(this).find('td').eq(1).text()).replace(/%|\s/g, ''),
            rangeLimits = rangeText.split('-');
        return !(val>= parseInt(rangeLimits[0], 10) && val<= parseInt(rangeLimits[1], 10));

    }).hide();
}
/* usage */
filterByPercentVal(55);
使用表作为标记,后续调用使其可重用,无需任何更改

jqueryfilter方法将在这里帮助您。 首先,您需要选择所有具有TD的TR元素,因为有些元素可能具有TH, 而在filter函数中,您需要使用simply.match/\d+/g从文本中提取最小值和最大值,该函数返回如下内容:val==[57,95]。作为字符串,您可以使用一元+运算符:+val[0]轻松地将其转换为数字。 在检查输入值是否在范围+val[0]v后,.filter的返回值将切换匹配的TR选择器。 var TR=$table.findtr:hastd; 函数过滤器表{ var v=+this.value;//输入值 过滤函数{ var val=$this.findtd:nth-child2.text.match/\d+/g; 返回$this.toggleClassselect,+val[0]v; }; } $range.oninput,filterTable; 表td{border:1px solid 777;} .选择{背景:金色;} 城市年龄百分比年 2011年纽约州57%-95% 2012年纽约州30%-65% 2012年佛罗里达州50%-60% 2014年10%-50% 范围:% jqueryfilter方法将在这里帮助您。 首先,您需要选择所有具有TD的TR元素,因为有些元素可能具有TH, 而在filter函数中,您需要使用simply.match/\d+/g从文本中提取最小值和最大值,该函数返回如下内容:val==[57,95]。作为字符串,您可以使用一元+运算符:+val[0]轻松地将其转换为数字。 在检查输入值是否在范围+val[0]v后,.filter的返回值将切换匹配的TR选择器。 var TR=$table.findtr:hastd; 函数过滤器表{ var v=+this.value;//输入值 过滤函数{ var val=$this.findtd:nth-child2.text.match/\d+/g; 返回$this.toggleClassselect,+val[0]v; }; } $range.oninput,filterTable; 表td{border:1px solid 777;} .选择{背景:金色;} 城市年龄百分比年 2011年纽约州57%-95% 2012年纽约州30%-65% 2012年佛罗里达州50%-60% 2014年10%-50%

范围:%s如何创建该结果?PHP?为什么不给元素添加一些数据-*属性,比如57%-95%?您可以通过data-attribute轻松过滤元素。@RokoC.Buljan我不使用任何php,只使用html和jquery与表一起使用。好吧,让我这样做吧,我没想过!谢谢@RokoC.BuljanYes表是手动创建的。您如何创建该结果?PHP?为什么不给元素添加一些数据-*属性,比如57%-95%?您可以通过data-attribute轻松过滤元素。@RokoC.Buljan我不使用任何php,只使用html和jquery与表一起使用。好吧,让我这样做吧,我没想过!谢谢@RokoC.BuljanYes表是手动创建的。@RokoC.Buljan已修复。谢谢你的bug报告。编辑得很好,但是如果我们删除一个空格,现在就会失败:你应该像我一样使用.match和结果数组。防弹。添加了一个使用每个OP的请求表的示例和一个防止null | |未定义问题的修复:@Roko:我知道,但我只是在整理,没有完全重新编写答案。如果我完全从头开始写的话,我会使用String.match,并且可能会使用以前的答案进行范围检查。我创建了这个小提琴,我正在尝试通过这里的输入组合进行搜索:@RokoC.Buljan Fixed。谢谢你的bug报告。编辑得很好,但是如果我们删除一个空格,现在就会失败:你应该像我一样使用.match和结果数组。防弹。添加了一个使用每个OP的请求表的示例和一个防止null | |未定义问题的修复:@Roko:我知道,但我只是在整理,没有完全重新编写答案。如果我完全从头开始写的话,我会选择String.match,并且可能会使用以前的答案进行范围检查。我创建了这个小提琴,我正在尝试通过组合输入进行搜索: