如何让JQuery报错-遁地龙卷风

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);
}
 
 
无论在哪里出生的孩子,都能看到整个世界
原文地址:https://www.cnblogs.com/resolvent/p/5782009.html