使包含选择器不区分大小写

时间:2015-09-04 13:35:45

标签: javascript jquery

我有一个非技术人员的编辑器来构建他们的特定应用程序。有几个地方虽然我需要插入一个' em'在他们输入的值之后,它将它正确地传递给我的后端。

为此,我有类似的东西

$( "input[name*='width']" ).on( "focusout", function(){
  var value = $(this).val();
  if(value.indexOf("em") <= 0 && value.indexOf("px") <= 0 && $(this).val().length != 0){
    var newVal = value+'em';
    $(this).val(newVal).trigger('change');
  }
});

我的问题是。有没有办法让这个选择器不区分大小写,所以我不必重复两次使用小写的代码和一个大写的代码来捕获所有的情况?

可能重复。我不能用那个答案。我已经看过了,在这种情况下无法使用过滤器。

5 个答案:

答案 0 :(得分:1)

您可以使用此自定义表达式:

$.expr[':'].nameCaseInsensitive = function (node, stackIndex, properties) {
    return node.name.toLowerCase().indexOf(properties[3]) > -1 ;
};

并使用如:

$('input:nameCaseInsensitive("width")').on('focusout',...);

FIDDLE DEMO

答案 1 :(得分:1)

尝试使用if (! filter_var($email, FILTER_VALIDATE_EMAIL)) { // Handle the invalid e-mail somehow exit("Invalid e-mail!"); } .filter(),并将String.prototype.match()标记设置为i

RegExp

答案 2 :(得分:1)

关于您唯一可以做的是选择所有带有input属性的 name元素,并使用不区分大小写的比较过滤它们

$('input[name]').filter(function(){
    return $(this).attr('name').match(/width/i);
}).on('focusout',...);

答案 3 :(得分:0)

你可以使用这样的匹配:

matches = value.match(/px|em/i);
if ($(this).val().length && matches !== null && matches['index'] <= 0) {
    var newVal = value+'em';
    $(this).val(newVal).trigger('change');
}

答案 4 :(得分:0)

我开始真正考虑这个问题并想出了一种不同的解决方案。由于我有多个字段,我想要这个,我创建了一个包含所有字段的数组。

var valueArray = ["padding", "width", "Width", "height", "Height", "spacing", "Spacing", "size", "Size"];

然后使用上面的代码循环遍历数组中列出的字段。这样我甚至不会看到屏幕上的其他输入,我不必担心它区分大小写,我不必重复代码。

for(var i = 0, ii = valueArray.length; i < ii; i++){
            $( "input[name*='"+valueArray[i]+"']" ).on( "focusout", function(){
                var value = $(this).val();
                if(value.indexOf("em") <= 0 && value.indexOf("px") <= 0 && $(this).val().length != 0){
                    var newVal = value+'em';
                    $(this).val(newVal).trigger('change');
                }
            });
        }