我正在使用以下行,我想让它不区分大小写:
var matches = $(this).find('div > span > div#id_to_find[attributeName ^= "filter"]');
if (matches.length > 0) {
}
我的问题是如何让选择器^=
不区分大小写?也许改成过滤然后一些正则表达式?
答案 0 :(得分:9)
要进行不区分大小写的属性选择,您需要编写自定义选择器函数。
$.expr[':'].iAttrStart = function(obj, params, meta, stack) {
var opts = meta[3].match(/(.*)\s*,\s*(.*)/);
return (opts[1] in obj) && (obj[opts[1]].toLowerCase().indexOf(opts[2].toLowerCase()) === 0);
};
你可以这样使用:
$('input:iAttrStart(type, r)')
这将匹配input
属性以type
或R
开头的所有r
元素(因此它匹配RADIO
,radio
, RESET
或reset
)。这是一个非常愚蠢的例子,但它应该做你需要的。
重新评论该功能很难理解,我会稍微解释一下。
$.expr[':'].iAttrStart = function(obj, params, meta, stack) {
这是创建自定义选择器的标准签名。
var opts = meta[3].match(/(.*)\s*,\s*(.*)/);
meta
是有关该呼叫的一系列详细信息。 meta[3]
是作为参数传递的字符串。在我的示例中,这是type, r
。正则表达式分别与type
和r
匹配。
return (opts[1] in obj) && (obj[opts[1]].toLowerCase().indexOf(opts[2].toLowerCase()) === 0);
如果两者都属实,则返回:
opts[1] in obj
)我本可以使用jQuery语法而不是本机JS语法更容易阅读,但这意味着性能会降低。
答案 1 :(得分:2)
在这里你可以看到:
http://www.ericmmartin.com/creating-a-custom-jquery-selector/
您需要做的是创建自定义jquery选择器:
jQuery.extend(jQuery.expr[':'], {
exactIgnoreCase: "(a.textContent||a.innerText||jQuery(a).text()||'').toLowerCase() == (m[3]).toLowerCase()"
});
然后使用它:
$("#detail select.fields option:exactIgnoreCase(" + q.val() + "):first");
答案 2 :(得分:0)
使用lonesomeday的答案时会出现轻微问题。
要重现错误,请尝试以下操作: 页面上的HTML标记是常见的Facebook元标记:
<meta content="Title of og tag" property="og:title" />
选择器:
$('meta:attrCaseInsensitive(property, og:site_name)')
这不起作用。原因是当选择器代码到达语句(opts[1] in obj)
时
它将执行返回false的("property" in obj)
。 (我不知道为什么)
要解决这个问题,我只是改变了最后一行来使用jQuery的attr()方法
$.expr[':'].iAttrStart = function(obj, params, meta, stack) {
var opts = meta[3].match(/(.*)\s*,\s*(.*)/);
return (undefined != $(obj).attr(opts[1])) && (obj[opts[1]].toLowerCase().indexOf(opts[2].toLowerCase()) === 0)
};