自定义jQuery伪选择器接收未定义的参数

Phi*_*ter 3 jquery jquery-selectors

我正在尝试基于我发现的几个不同的教程,为jQuery添加一个自定义伪选择器,目前正在使用v1.8.0.我基本上试图实现不区分大小写:包含选择器.

我目前的化身看起来像这样

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

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

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

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

pim*_*vdb 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;

    };
});
Run Code Online (Sandbox Code Playgroud)