不区分大小写的 jQuery 属性选择器

IT技术 javascript jquery jquery-selectors
2021-01-26 17:40:52

我正在使用属性包含选择器$('[attribute*=value]')

<input name="man-news">
<input name="milkMan">

<script>    
    $( "input[name*='man']").css("background-color:black");
</script>

这适用于第一个输入,但不适用于第二个输入,因为“ Man ”有一个大写的“ M

如何制作$( "input[name*='man']")不区分大小写的选择器?

5个回答

最简单的方法是在选择器的正则表达式部分添加一个不区分大小写的标志“i”:

所以代替

$( "input[name*='man']")

你可以做

$( "input[name*='man' i]")

JS小提琴:https : //jsfiddle.net/uoxvwxd1/3/

仅供参考:适用于 Chrome 53,但不适用于 IE 11,很有趣,但并不理想
2021-03-31 17:40:52
另外,请参阅有关属性选择器的 MDN 文档developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors
2021-03-31 17:40:52
@Stan 这让我大吃一惊。我在 Chrome 和 IE11 中看到不同的结果,并认为不可能;一定有其他的不同。然后我看到了你的评论。我认为 jQuery 的全部意义在于浏览器独立性。当涉及到选择器语法等内部结构时,我特别希望这是真的。关于为什么存在这种差异或是否/在哪里记录的任何想法?
2021-04-03 17:40:52
这个解决方案看起来很简单,但在我的情况下它给出了:jquery.min.js:2 Uncaught Error: Syntax error, unrecognized expression: [name*='fund' i]
2021-04-06 17:40:52
@BlueMonkMN 已经一年了,我还没有重新测试,但我的猜测是 IE 的 REGEX 处理是造成差异的原因。
2021-04-09 17:40:52

您可以随时使用.filter()

var mans = $('input').filter(function() {
    return $(this).attr('name').toLowerCase().indexOf('man') > -1;
});

mans.css('background-color', 'black');

这里的关键部分是toLowerCase()小写name属性,允许您测试它是否包含man.

var control = $('input').filter(function() {
    return /*REGEX_VALUE*/i.test($(this).attr('id'));
});

*REGEX_VALUE* - 您要查找的值

我最终使用正则表达式来验证属性“ID”是否满足......如果你想找到一个或多个匹配的值,区分大小写或不敏感或特定范围的值,正则表达式更加灵活......

我只是能够完全忽略 jQuery 的区分大小写,以使用下面的代码实现我想要的,

$.expr[":"].contains = $.expr.createPseudo(function(arg) {
  return function( elem ) {
    return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
  };
});

您可以使用此链接根据您的 jQuery 版本查找代码, https://css-tricks.com/snippets/jquery/make-jquery-contains-case-insensitive/

还有一篇文章用 jQuery 做了很多好事:http : //www.ultechspot.com/jquery/using-jquery-search-html-text-and-show-or-hide-accordingly

这对我使用 jQuery 有效,如果我将项目添加到表格中

    // check if item already exists in table
    var inputValue = $('#input').val(); // input
    var checkitem = $('#exampleTable td.value div.editable').filter(function() {

        //check each table's editable div matches the input value in lowercase 
        if ($(this).text().toLowerCase() === inputValue.toLowerCase()) {
            itemexists = true; 
        }   
    });

    if (itemexists) {
        alert("item exists in the table");
        return;
    }
问题是不区分大小写的属性选择器。
2021-03-21 17:40:52