Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在代码中找到jQuery或Zepto的所有用法_Javascript_Jquery_Frameworks_Zepto - Fatal编程技术网

Javascript 如何在代码中找到jQuery或Zepto的所有用法

Javascript 如何在代码中找到jQuery或Zepto的所有用法,javascript,jquery,frameworks,zepto,Javascript,Jquery,Frameworks,Zepto,我和我的团队希望保持从Zepto切换到另一个框架或本机浏览器调用的低成本,我们在使用WebKit时只针对WebKit 跟踪代码中使用Zepto的位置的策略是什么? 有什么比维护所用方法的自述列表更好的方法吗? 你会怎么做?嗯,你可以搜索$sign 像parents这样的每个方法都将在最终使用$符号创建的对象上调用。因此,如果您找到了$的所有实例并跟踪结果变量的使用情况,您将拥有一切。jQuery:您可以使用noConflict为jQuery函数指定一个好的、唯一的名称,也许jQuery本身就是内

我和我的团队希望保持从Zepto切换到另一个框架或本机浏览器调用的低成本,我们在使用WebKit时只针对WebKit

跟踪代码中使用Zepto的位置的策略是什么? 有什么比维护所用方法的自述列表更好的方法吗?
你会怎么做?

嗯,你可以搜索$sign

像parents这样的每个方法都将在最终使用$符号创建的对象上调用。因此,如果您找到了$的所有实例并跟踪结果变量的使用情况,您将拥有一切。

jQuery:您可以使用noConflict为jQuery函数指定一个好的、唯一的名称,也许jQuery本身就是内置的,但如果这是一个难题,那么其他东西很容易与其他东西区分开来,像$jq或类似的-noConflict返回jQuery函数,您可以这样做,例如var$jq=jQuery.noConflict

Zepto:尽管声明使用与jQuery兼容的语法,但它本身似乎不支持noConflict。但是,如果在window对象上已经定义了$,它将不使用它,因为这一行:

'$' in window || (window.$ = Zepto);
因此,在加载Zepto之前定义$,然后在代码中只使用Zepto,或者为它分配同样唯一的东西,比如$jq或$zt,等等-例如,var$zt=Zepto


在任何一种情况下:如果需要查找这些位,请在代码中搜索这些位。

除了搜索$和特定方法外,您还可以通过在运行代码中记录它们的用法来确定正在使用哪些方法

下面的代码将记录每次发出jQuery调用时使用的函数和堆栈跟踪,但不会记录jQuery发出的任何内部调用

<script>
(function(){
var insideJQuery = false;
function replaceMethod(obj, method, prefix) {
    var oldMethod = obj[method];
    if(typeof oldMethod !== "function")
        return;

    obj[method] = function() {
        var externalCall = !insideJQuery;
        insideJQuery = true;
        var output = oldMethod.apply(this, arguments);

        if(externalCall) {
            console.log(prefix + method + ' called');
            console.trace();
            insideJQuery = false;
        }

        return output;
    }
}

for(var method in $.fn) {
    if(method != 'constructor' &&
       method != 'init')
        replaceMethod($.fn, method, '$.fn.');
}

for(var method in $) {
    if(method != 'Event')
        replaceMethod($, method, '$.');
}
})();
</script>

当然,jQuery调用中的jQuery调用除外,比如$document.readyfunction{$'div}

谢谢,这有助于保持名称空间的独立性,但无助于评估用本机浏览器调用替换Zepto会是什么样子。Ie这种策略无助于找到像Zepto的“父母”这样的方法的用途。@ulver:我不确定我是否遵循了。您将看到$zt调用,它为您匹配的元素提供Zepto包装,然后您将看到parents调用。例如,在事件处理程序中,var x=$zthis;x、 parents.csscolor,蓝色;或者随便什么-更正:您将如何用本机浏览器调用替换Zepto。如何找到代码中使用的所有方法,如“parents”?