2012-04-01 57 views
1

我可以重载$()函数吗?
我想实现这样的模式$('$ name'),其中字符串以'$'开头,然后返回我定义的结果。例如:

function getElementByVarName(varName) { 
    //return something of my own 
} 

var original$=$; 
$=function(param) { 
    if (typeof param === 'string' && param.startsWith('$')) { 
     return getElementByVarName(param.substring(1)); 
    } else { 
     original$(param); 
    } 
} 

这样做的最佳方式是什么?

回答

0

您可以使用noConflict()

var j = $.noConflict(); 
(function($) { 
    $(function() { 
    //here your new function codes 

}); 
})(jQuery); 

而且原单$现在j功能

这里DEMO

+0

如何...你把任何exapmle?我想要原始的行为存在 - 我只需要覆盖$的情况。 – Naor 2012-04-01 11:31:34

+0

我需要编写一个插件或方法。我仍然不明白如何使用noConflict来编写一些通用的东西。 – Naor 2012-04-01 11:35:18

+0

已更新的代码,请检查 – safarov 2012-04-01 11:48:34

0

你已经勾勒出什么应该工作正常哉!

编辑:你要适应传递给原有的功能各种争论,这样做:

original$.apply(original$, arguments) 
+0

但我认为有许多选项,$可以得到..我相信有一个更好的方式来写它。 – Naor 2012-04-01 11:33:52

+0

这样的方式$将松散所有的成员,如FN,扩展和其他方法。此外,在$(function(){})模式中,原始$用于。 – Naor 2012-04-01 12:25:02