2012-08-23 133 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