2012-08-23 176 views
3

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

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

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

。看起来选择器正确地初始化了,但是当jQuery调用函数时,只有obj参数被定义。其余3个参数未定义。

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

有没有人有一个想法,为什么会发生这种情况?

回答

5

他们在1.8中为Sizzle做了重写。目前,the way of defining a pseudo如下: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; 

    }; 
}); 
+0

+1对于博客文章,我直接找到了源代码:p – Esailija