toLowerCase(),在jquery中带有“filter”

toLowerCase() with `filter` in jquery

本文关键字:filter jquery toLowerCase      更新时间:2024-01-27

如何在jquery中使用toLowerCase()filter()

这是我的下拉列表:

<select id="drpParty" name="drpParty" data-placeholder="Choose Party...." required="" class="chzn-select span8 row-fluid">
   <option value="-1" selected="" disabled="">Chose Customer</option>
   <option value="1">Party Ahmed</option>
   <option value="2">Party Ahmed</option>
   <option value="3">Ukraine</option>
   <option value="5">America</option>
   <option value="6">Indonesia</option>
   <option value="8">wheere</option>
   <option value="9">new party</option>
   <option value="10">Nwe Pary</option>
   <option value="11">Latest party </option>
   <option value="12">sha</option>
   <option value="13">shaj</option>
   <option value="14">My new party without salesman info</option>
   <option value="15">testing the latest party with hierarchy</option>
   <option value="16">testing the value</option>
   <option value="17">Kamran Ahmed</option>
   <option value="18">Testing a new party</option>
   <option value="19">Sale</option>
</select>

我想获取具有"Sale"的选项,因为它是文本。我正在使用以下内容,并且它可以完美地找到option

var lookup = 'Sale';
var elem=$('#drpParty option:contains('+ lookup +')').filter(function() {
    return $(this).text() === lookup;
});
console.log(elem.val());

现在,在这种情况下,文本Sale可能不一定在下拉框内,也就是说,它可能是全大写或全小写,所以我正在尝试,也就是把option的文本设为小写,然后将其与lookup:进行比较

var lookup = 'sale';
var elem=$('#drpParty option:contains('+ lookup +')').filter(function() {
    return $(this).text().toLowerCase() === lookup;
});
console.log(elem.val());

但是它不起作用,即option没有被提取。在这种情况下,比较它没有返回这个元素,我做错了什么?

点击此处http://jsfiddle.net/7xK82/

:containsjQuery选择器区分大小写,因此您需要像已经做过的那样手动筛选它。您应该做的只是删除选择器的:contains部分,然后获取所有<option>并过滤它们,例如:

var lookup = 'sale';
var elem = $('#drpParty > option').filter(function() {
    return $(this).text().toLowerCase() === lookup.toLowerCase();
});

请注意,出于性能原因,通常最好使用>在选择器中明确指定它是子元素,而不是只查找<select>元素的任何子元素。

只需无意识地比较

var lookup = 'Sale';
var insensitive = lookup.toLowerCase();
var elem=$('#drpParty').find('option').filter(function() {
    return $(this).text().toLowerCase() === insensitive;
});
console.log(elem.val());

http://jsfiddle.net/7xK82/4/

您可以制作自己的不区分大小写的contains过滤器

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

执行以上代码后,:contains过滤器将变得不区分大小写,您可以在任何地方使用它,而不必关心字符大小写。确保它只在加载jQuery之后运行,并且只需要运行一次。如果jQuery再次更改其内部功能和结构,它可能会崩溃。