Чтобы сделать выбор атрибутов без учета регистра, вам нужно написать пользовательскую функцию селектора.
$.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, но это означало бы снижение производительности.