0

有人可以解释为什么我的元素没有过滤吗?

这是在一本书中写的,他很难过如果 false 元素将被删除,并将显示带有 true 的元素:

$('li').filter(function() { return this.innerHTML.match(/^\d+$/)})

我只需要用 14.15 过滤 li(我只需要 14.15 的结果)!

http://jsfiddle.net/crew1251/MYXYX/

<ul id="list">
    <li>raz</li>
    <li>asdf 14.15</li>
    <li>tri</li>
    <li>chetire_Tri</li>
    <li>pyat</li>


</ul>


$('li').filter(function () {
    return this.innerHTML.match(/^\d+$/);
});
4

2 回答 2

6

如果要查找li包含数字的 s,则应执行以下操作

var listWithDigits = $('li').filter(function () {
    return this.innerHTML.match(/\d+/);
    // return this.innerHTML.match(/\d+$/); // returns lis that end with digits
    // return this.innerHTML.match(/^\d+/); // returns lis that start with digits
    // return this.innerHTML.match(/^\d+$/); // returns lis that contain only digits
});
console.log(listWithDigits.length); // 1

您当前的正则表达式失败,因为它只接受li仅包含数字的 s,因为您已经用^$

http://jsfiddle.net/MYXYX/1/

于 2013-10-23T23:42:59.237 回答
1

您使用了错误的模式,您必须删除锚点:

$('li').filter(function () {
    return $(this).html().match(/\d/);
});

请注意,您不需要测试超过一位,因此+量词是无用的。

于 2013-10-23T23:44:42.483 回答