Javascript jQuery选择器正则表达式
我正在阅读关于使用通配符或正则表达式(不确定确切术语)和jQuery选择器的文档 我自己也找过了,但是找不到关于语法和如何使用它的信息。有人知道语法文档在哪里吗 编辑:属性过滤器允许您根据属性值的模式进行选择。James Padolsey创建了一个允许使用正则表达式进行选择的过滤器 假设您有以下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[':']已被弃
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的情况下找到的唯一选项,也是最有效的一个。非常感谢。