javascript - 扩展 jQuery 属性选择器

标签 javascript jquery attributes

我有一个内联弹出窗口,显示复选框列表和关联标签,每个标签都位于单独的 span 元素中。我想添加一个文本框,用户可以在其中键入以过滤弹出窗口中的值(用户名)。我有以下代码:

$("#toEmpFilter").live("change", function () {

            var FilterVal = $(this).val();
            $("input.boxes").not("[title*=" + FilterVal + "]").each(function () {
                $(this).parent("span.clscheck").hide();
            });
          $("input.boxes[title*=" + FilterVal + "]").each(function () {
                $(this).parent("span.clscheck").show();
            });

        });   

标签值被复制到标题字段中,例如 <input type="text" title="john woo"/> 。这段代码工作正常。唯一的问题是title*=FilterVal进行区分大小写的比较,而我需要不区分大小写的比较。

我做了一些研究,但只能找到扩展 :extend like 关键字,而不是 *=$=运算符。

最佳答案

您可以将函数传递给 .not() 并标准化两端的大小写。

var FilterVal = $(this).val().toLowerCase(); // change to lower case

$("input.boxes").not(function() {
          // change title to lower case and compare
      return this.title.toLowerCase().indexOf( FilterVal ) > -1;
}).each(function () {
    $(this).parent("span.clscheck").hide();
});
<小时/>

编辑:没有注意到您没有进行精确的比较。已修复以复制属性包含比较。

您可以像这样缩短代码:

   $("#toEmpFilter").live("change", function () {
        var FilterVal = $(this).val().toLowerCase();

        $("input.boxes").each(function () {
            $(this).parent("span.clscheck")
                   .toggle( this.title.toLowerCase().indexOf( FilterVal ) > -1 );
        });
    });

这样您只需选择元素一次。

关于javascript - 扩展 jQuery 属性选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3968195/

相关文章:

javascript - 为什么我的input type=file 没有加载文件信息?

HTML 文件的 jQuery .load() 在 Chrome 中不一致

html - XPath具有条件的多个属性值之一

css - 在 CSS 中定义 <img> 的 src 属性

android - 使用 MediaPlayer 播放声音时出现无效属性错误

javascript - 在 HTML 中调用函数时出现问题

javascript - 如何在javascript中的字符串中的每个新行添加 '>'?

javascript - 如何将 ng-if 与 ng-repeat 一起使用?

javascript - 禁用页面调整大小 HTML

javascript - 有没有办法删除数据层中的对象?