3

我正在尝试根据我找到的一些不同的教程向 jQuery 添加一个自定义的伪选择器,目前使用的是 v1.8.0。我实际上是在尝试实现不区分大小写的 :contains 选择器。

我现在的化身是这样的

$.expr[':'].icontains = function(obj, index, meta, stack){
     return (obj.textContent || obj.innerText || jQuery(obj).text() || '').toLowerCase().indexOf(meta[3].toLowerCase()) >= 0;
};

来自这篇文章。似乎选择器正在正确初始化,但是当 jQuery 调用该函数时,只定义了 obj 参数。其余 3 个参数未定义。

当我将参数记录到控制台时,我看到一个包含 2 项的数组,第一项是我的选择器在 :icontains 调用之前返回的 DOM 对象,第二项是未定义的。

有谁知道为什么会发生这种情况?

4

1 回答 1

5

他们在 1.8 中对 Sizzle 进行了重写。目前定义伪的方式如下:http: //jsfiddle.net/bazWj/

$.expr.pseudos.icontains = $.expr.createPseudo(function(arg) {
    return function(elem) {
         return (elem.textContent
                  || elem.innerText
                  || jQuery(elem).text()
                  || '')
        .toLowerCase()
        .indexOf(arg.toLowerCase()) >= 0;

    };
});
于 2012-08-23T20:26:50.847 回答