jQuery选择器正则表达式

Joe*_*ham 563 javascript regex jquery jquery-selectors

我正在阅读使用jQuery选择器使用通配符或正则表达式(不确定的确切术语)的文档.

我自己一直在寻找,但一直无法找到有关语法和如何使用它的信息.有谁知道语法的文档在哪里?

编辑:属性过滤器允许您根据属性值的模式进行选择.

nic*_*ckf 718

您可以使用该filter函数应用更复杂的正则表达式匹配.下面是这将只是比赛的前三个div的(现场演示的例子在这里):

$('div')
  .filter(function() {
    return this.id.match(/abc+d/);
  })
  .html("Matched!");
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div id="abcd">Not matched</div>
<div id="abccd">Not matched</div>
<div id="abcccd">Not matched</div>
<div id="abd">Not matched</div>
Run Code Online (Sandbox Code Playgroud)

  • +1是一个简单的解决方案,不需要额外的库/插件. (146认同)
  • 在这里晚了3年,但我只是查找jQuery通配符,发现这非常有帮助.我讨厌在可以避免的情况下加载数百个库.这就是我首先使用jQuery的原因,就是在一些简单而强大的功能中融入我想要的所有功能. (33认同)
  • @stevendesu:另外3年后,我还决定坚持这个答案,而不是用更多的选择器来膨胀jQuery. (3认同)
  • @Sasivarnakumar 这个问题的答案是 [here](/sf/ask/34582481/) (2认同)

Xen*_*Yan 328

James Padolsey创建了一个精彩的过滤器,允许正则表达式用于选择.

说你有以下内容div:

<div class="asdf">
Run Code Online (Sandbox Code Playgroud)

Padolsey的:regex过滤器可以选择它:

$("div:regex(class, .*sd.*)")
Run Code Online (Sandbox Code Playgroud)

另外,查看选择器官方文档.

  • 来自nickf的答案应该是公认的答案.如果您正在阅读这个答案,请务必阅读该答案! (10认同)
  • 我收到错误:语法错误,无法识别的表达式:unsupported pseudo:regex (5认同)
  • 好.我去过那里,但我真的不知道我要找的名字.我有另一种外观,使用属性过滤器是我所追求的. (3认同)
  • -1。实现此目的的代码未包含在答案中,并且容易受到链接腐烂的影响。另外,我在测试代码时发现了两个错误-它会从包含它们的正则表达式中删除逗号(通过将matchParams.join('')替换为matchParams.join(',')`来解决)以及任何匹配`'undefined'`或`'null'`将分别匹配`undefined`和`null`。第二个错误可以通过首先检查测试值“!== undefined”和“!== null”来解决。无论哪种方式,将函数传递到`.filter()`都更容易,对我来说更干净/更易读。 (2认同)

dnx*_*xit 269

这些可能会有所帮助.

如果你是通过Contains找到它那么就是这样的

    $("input[id*='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });
Run Code Online (Sandbox Code Playgroud)

如果您通过Starts With找到它,那么它就像这样

    $("input[id^='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });
Run Code Online (Sandbox Code Playgroud)

如果你是通过Ends With找到它那么就像这样

     $("input[id$='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });
Run Code Online (Sandbox Code Playgroud)

如果要选择id不是给定字符串的元素

    $("input[id!='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });
Run Code Online (Sandbox Code Playgroud)

如果要选择id包含给定单词的元素,则用空格分隔

     $("input[name~='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });
Run Code Online (Sandbox Code Playgroud)

如果要选择id等于给定字符串或以该字符串后跟连字符开头的元素

     $("input[id|='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案,但`id`是标识符,[不能包含空格](https://www.w3.org/TR/CSS21/syndata.html#value-def-identifier),`〜=应将示例更改为其他名称,例如类,这是由空格分隔的标识符列表。像“类”之类的东西就是“〜=”属性选择器的目的。 (3认同)

Nic*_*nel 44

如果使用正则表达式仅限于测试attribut是否以某个字符串开头,则可以使用^ jquery选择器

例如,如果您只想选择ID为"abc"的div,则可以使用 $("div[id^='abc']")

可以在这里找到许多非常有用的选择器以避免使用正则表达式:http://api.jquery.com/category/selectors/attribute-selectors/

  • 这对我有好处,我只是想看看输入 id 的末尾是否有 '__destroy' 所以我使用了 `*=` 像这样:`$("input[id*='__destroy'][value ='真']")` (2认同)

Kam*_*ski 23

var test = $('#id').attr('value').match(/[^a-z0-9 ]+/);
Run Code Online (Sandbox Code Playgroud)

干得好!


bro*_*ong 8

添加一个jQuery函数,

(function($){
    $.fn.regex = function(pattern, fn, fn_a){
        var fn = fn || $.fn.text;
        return this.filter(function() {
            return pattern.test(fn.apply($(this), fn_a));
        });
    };
})(jQuery);
Run Code Online (Sandbox Code Playgroud)

然后,

$('span').regex(/Sent/)
Run Code Online (Sandbox Code Playgroud)

将选择文本匹配/已发送/的所有span元素.

$('span').regex(/tooltip.year/, $.fn.attr, ['class'])
Run Code Online (Sandbox Code Playgroud)

将选择所有span元素,其类匹配/tooltip.year/.


Jān*_*ris 7

id和类仍然是属性,因此如果相应选择,可以对它们应用regexp属性过滤器.点击此处了解更多信息:http: //rosshawkins.net/archive/2011/10/14/jquery-wildcard-selectors-some-simple-examples.aspx