Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery选择器正则表达式_Javascript_Jquery_Regex_Jquery Selectors - Fatal编程技术网

Javascript jQuery选择器正则表达式

Javascript jQuery选择器正则表达式,javascript,jquery,regex,jquery-selectors,Javascript,Jquery,Regex,Jquery Selectors,我正在阅读关于使用通配符或正则表达式(不确定确切术语)和jQuery选择器的文档 我自己也找过了,但是找不到关于语法和如何使用它的信息。有人知道语法文档在哪里吗 编辑:属性过滤器允许您根据属性值的模式进行选择。James Padolsey创建了一个允许使用正则表达式进行选择的过滤器 假设您有以下div: <div class="asdf"> 此外,请检查 更新::语法弃用JQuery 3.0 由于Padolsey实现中使用的jQuery.expr[':']已被弃

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

我自己也找过了,但是找不到关于语法和如何使用它的信息。有人知道语法文档在哪里吗

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

James Padolsey创建了一个允许使用正则表达式进行选择的过滤器

假设您有以下
div

<div class="asdf">
此外,请检查

更新:
语法弃用JQuery 3.0 由于Padolsey实现中使用的
jQuery.expr[':']
已被弃用,并将在最新版本的jQuery中出现语法错误,以下是他的代码,适用于jQuery 3+语法:

jQuery.expr.pseudos.regex=jQuery.expr.createPseudo(函数(表达式){
返回函数(elem){
var matchParams=expression.split(','),
有效标签=/^(数据| css):/,
属性={
方法:matchParams[0]。是否匹配(有效标签)?
matchParams[0]。拆分(“:”)[0]:“attr”,
属性:matchParams.shift().replace(有效标签“”)
},
regexFlags='ig',
regex=newregexp(matchParams.join(“”).replace(/^\s+|\s+$/g“”),regexFlags);
返回regex.test(jQuery(elem)[attr.method](attr.property));
}
});
您可以使用该函数应用更复杂的正则表达式匹配

下面是一个与前三个div匹配的示例:

$('div')
.filter(函数(){
返回此.id.match(/abc+d/);
})
.html(“匹配!”)

不匹配
不匹配
不匹配

不匹配的
ID和类仍然是属性,因此如果您相应地选择,可以对它们应用regexp属性过滤器。请在此处阅读更多信息:


给你

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

例如,如果您只想选择id以“abc”开头的div,您可以使用:

$(“div[id^='abc']))
在这里可以找到许多避免使用正则表达式的非常有用的选择器:

这些选择器非常有用

如果您通过查找包含的内容,则会是这样

    $("input[id*='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });
    $("input[id^='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });
     $("input[id$='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });
如果您正在查找以
开头的,则会是这样

    $("input[id*='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });
    $("input[id^='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });
     $("input[id$='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });
如果您正在查找以
结尾的by,则会是这样

    $("input[id*='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });
    $("input[id^='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });
     $("input[id$='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });
如果要选择id不是给定字符串的元素

    $("input[id!='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });
如果要选择名称包含给定单词且由空格分隔的元素

     $("input[name~='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });
如果要选择id等于给定字符串或以该字符串开头,后跟连字符的元素

     $("input[id|='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });
添加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);
那么

将选择所有与文本匹配的span元素/Sent/

$('span').regex(/tooltip.year/, $.fn.attr, ['class'])

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

如果您只想选择包含给定字符串的元素,则可以使用以下选择器:


$(':包含(“搜索字符串”))
我只是给出了我的实时示例:

在本机javascript中,我使用以下代码片段查找ID以“select2-qownerName\u select-result”开头的元素

document.querySelectorAll([id^='select2-qownerName\u select-result'])

当我们从javascript转换到jQuery时,我们已经用下面的代码片段替换了上面的代码片段,它在不干扰逻辑的情况下涉及更少的代码更改


$(“[id^='select2-qownerName\u select-result']”)

确定。我去过那里,但我真的不知道我要找的东西的名字。我又看了一眼,使用属性过滤器就是我想要的。由@padolsey编写的正则表达式选择器非常好用。下面是一个示例,您可以使用它迭代文本、文件和复选框输入字段或文本区域:$j('input:regex(type,text | file | checkbox),textarea');以下来自NIKF的答案应为可接受答案。如果你正在读这个答案,一定要读那个!我得到错误:语法错误,无法识别的表达式:不支持的伪:regex-1。实现这一点的代码未包含在答案中,并且容易出现链接错误。此外,我在测试代码时发现了两个错误-它将从包含它们的正则表达式中删除逗号(通过将
matchParams.join(“”)
替换为
matchParams.join(‘,’)
)来解决,任何与
'undefined'
'null'
匹配的模式将分别与
undefined
null
匹配。通过检查测试值
!==未定义的
!==首先为空。无论哪种方式,将函数传递到
.filter()
都会更容易,而且对我来说更清晰/更可读。这不适用于不区分大小写的匹配要求。.filter函数更适合这些需要。这对我来说很好,我只是想看看输入id的末尾是否有一个“u destroy”,所以我使用了
*=
如下:
$(
如何在匹配的地方使用变量(/abc+d/)@Sasivarnakumar这个问题的答案是这是我在StackOverflow上最喜欢的新答案!答案很好,但是
id
s,作为标识符,
~=
示例应该更改为其他内容,例如
,它是一个以空格分隔的标识符列表。像
这样的东西是
~=
属性选择器的目的。我在没有jQuery的情况下找到的唯一选项,也是最有效的一个。非常感谢。