0.解決的問題 a.當選擇器語法沒有問題,找不到元素時,讓jquery報錯 b.選擇器語法有問題,程式無法繼續執行時,讓jquery報錯 主要針對傳遞字元串,嘗試前請備份jquery庫,最好改變名字加已區分. 1.環境配置 jquery-3.0.0.js未壓縮版 2.選擇器語法沒有問題,找不到元素 ...
0.解決的問題
a.當選擇器語法沒有問題,找不到元素時,讓jquery報錯
b.選擇器語法有問題,程式無法繼續執行時,讓jquery報錯
主要針對傳遞字元串,嘗試前請備份jquery庫,最好改變名字加已區分.
1.環境配置
jquery-3.0.0.js未壓縮版
2.選擇器語法沒有問題,找不到元素
修改jquery源碼增加代碼,以下是修改後的代碼,加紅的是增加部分
var version = "3.0.0", // Define a local copy of jQuery jQuery = function( selector, context ) { // The jQuery object is actually just the init constructor 'enhanced' // Need init if jQuery is called (just allow error to be thrown if not included) if(typeof window["[]"] == "undefined") { window["[]"] = []; window["[]"]["selector"] = selector; window["[]"]["current"] = 0; } else { window["[]"]["current"] ++; } var c = new jQuery.fn.init( selector, context ) if(window["[]"]["current"]-- == 0) { if(c.length == 0) { window.console.error(window["[]"]["selector"] +"找不到"); } delete window["[]"]; } return c; },
3.選擇器語法有問題,導致程式無法繼續執行
代碼舉例
$(function()
{
var lol = $("li:");
alert(lol.length);
});
在上個問題增加的代碼的基礎上,向jquery源碼增加代碼,以下是修改後的代碼,紅色是增加部分
process = special ? mightThrow : function() { try { mightThrow(); } catch ( e ) { if ( jQuery.Deferred.exceptionHook ) { jQuery.Deferred.exceptionHook( e, process.stackTrace ); } // Support: Promises/A+ section 2.3.3.3.4.1 // https://promisesaplus.com/#point-61 // Ignore post-resolution exceptions if ( depth + 1 >= maxDepth ) { // Only substitute handlers pass on context // and multiple values (non-spec behavior) if ( handler !== Thrower ) { that = undefined; args = [ e ]; } deferred.rejectWith( that, args ); } if(typeof window["[]"]!="undefined") { if(window["[]"]["current"] == 0) { window.console.error(window["[]"]["selector"]+"使程式無法向下執行"); } } } };
至於程式無法向下執行的原因,我也無法給出肯定的回答,JavaScript的函數調用總是會返回內容,我使用debug工具查找時,走到這個函數的末尾就不走了,怎麼說呢,有緣再會吧!
找到原因了var lol = $("li:");報錯了,導致程式的終止
try
{
var lol = $("li:");
}
catch(e)
{
alert(e);
}