2012-09-13 35 views
4

我在執行此操作時遇到問題。從其他的問題,我有以下片段:jQuery不區分大小寫包含選擇器 - 1.8.1

jQuery.expr[":"].Contains = jQuery.expr.createPseudo(function(arg) { 
    return function(elem) { 
     return jQuery(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0; 
    }; 
}); 

但我得到的錯誤:TypeError: jQuery.expr.createPseudo is not a function

任何想法?另外,這段代碼應該放在哪裏?文件準備好了

感謝,

戴夫

+0

您確定您使用的是jQuery 1.8.1嗎?也許jQuery被加載了兩次,並且舊的jQuery覆蓋了第一個。 你可以通過打開Javascript控制檯並檢查輸出 jQuery()。jquery –

+0

Ah:/有一箇舊版本的頁面, $不是函數「? – swiss196

+0

如果頁面上確實存在多個jQuery版本,可能最初是故意的。檢查是否存在「.noConflict()」,它會取消綁定$以預期其被其他庫重用。 –

回答

6

不要使用createPseudo

jQuery.expr[":"].Contains = function(obj,index,meta) { 
    return jQuery(obj).text().toUpperCase().indexOf(meta[3].toUpperCase()) >= 0; 
}; 

here
不要緊,你把這個 - 你只是定義一個函數,而不是訪問DOM - 所以它不在裏面document.ready。只需確保在定義此過濾器之前加載jQuery並在使用它之前對其進行定義。希望這可以幫助!

+0

爲什麼他不使用createPseudo?是不是createPseudo創建僞選擇器的首選方法,以確保未來的兼容性? –

+0

我同意威爾,但嘗試這樣做不過:我得到一個錯誤,「噓」這是我的搜索查詢'錯誤:語法錯誤,無法識別的表達式:包含(「十拿九穩」)' – swiss196

+0

對我的作品。演示:http://jsbin.com/idavic/1/edit – Abraham

相關問題