标签:
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);
}
标签:
原文地址:http://www.cnblogs.com/resolvent/p/5782009.html