toLowerCase()在jquery中使用`filter`

时间:2013-12-02 10:41:42

标签: javascript jquery dom

如何在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/

3 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:3)

只是不敏感地比较它们

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/

答案 2 :(得分:1)

您可以制作自己不区分大小写的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再次改变它的内部函数和结构时,它可能会中断。