Ответ 1
$(':input[name]').filter(function() {
return this.value.toLowerCase() == 'search';
});
Вы также можете создать пользовательский селектор...
$.expr[':'].valueCaseInsensitive = function(node, stackIndex, properties){
return node.value.toLowerCase() == properties[3];
};
var searchInputs = $(':input:valueCaseInsensitive("Search")');
Пользовательский селектор немного переборчив, если вы делаете это один раз, но если вам нужно использовать его много раз в своем приложении, это может быть хорошей идеей.
Update
Возможно ли иметь такой пользовательский селектор для любого атрибута?
Конечно, ознакомьтесь со следующим примером. Он немного запутан (синтаксис, например :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")');
Вы могли бы использовать eval()
, чтобы сделать эту строку массивом, но я считаю, что сделать это таким образом более комфортным (и вы не будете случайно выполнять какой-либо код, который вы размещаете в своем селекторе).
Вместо этого я разделяю строку на разделителе ,
, а затем удаляет пробелы, '
и "
с каждой стороны каждого элемента массива. Обратите внимание, что a ,
внутри цитаты не будет обрабатываться буквально. Нет причин, по которым нужно требовать буквально, но вы всегда могли бы противопоставить эту возможность. Я оставлю это до вас.:)
Я не думаю, что map()
имеет лучшую поддержку браузера, поэтому вы можете эксплоретироваться по массиву args
или добавьте объект Array
.