Теперь он существует в CSS4, см. этот ответ .
В противном случае для jQuery вы можете использовать ...
$(':input[name]').filter(function() {
return this.value.toLowerCase() == 'search';
});
jsFiddle .
Вы также можете сделать пользовательский селектор ...
$.expr[':'].valueCaseInsensitive = function(node, stackIndex, properties){
return node.value.toLowerCase() == properties[3];
};
var searchInputs = $(':input:valueCaseInsensitive("Search")');
jsFiddle .
Пользовательский селектор немного излишнимесли вы делаете это один раз, но если вам нужно использовать его много раз в приложении, это может быть хорошей идеей.
Обновление
Возможно ли иметь такой видселектор для любого атрибута?
Конечно, посмотрите следующий пример.Это немного запутанно (синтаксис, такой как :input[value:toLowerCase="search"]
, возможно, был более интуитивно понятен), но он работает:)
$.expr[':'].attrCaseInsensitive = function(node, stackIndex, properties){
var args = properties[3].split(',').map(function(arg) {
return arg.replace(/^\s*["']|["']\s*$/g, '');
});
return $(node).attr(args[0]).toLowerCase() == args[1];
};
var searchInputs = $('input:attrCaseInsensitive(value, "search")');
jsFiddle .
Возможно, вы могли бы использоватьeval()
, чтобы сделать эту строку массивом, но я считаю, что делать это более удобно (и вы не будете случайно выполнять код, который вы поместите в свой селектор).
Вместо этого я разбиваю строку на,
разделитель, а затем удаление пробелов, '
и "
с каждой стороны каждого элемента массива.Обратите внимание, что ,
внутри цитаты не будет трактоваться буквально.Нет причин, по которым это нужно делать буквально, но вы всегда можете использовать эту возможность.Я оставлю это на ваше усмотрение.:)
Не думаю, что map()
имеет лучшую поддержку браузера, поэтому вы можете явно выполнять итерации по массиву args
или увеличивать объект Array
.