Dokuwiki 我们的原型,我的网站使用 Jquery。
如果有另一种方法来改变 Dokuwiki javascript,而不是在我的 jQuery 上使用 jQuery.noConflict() 或/和 var $j = jQuery?
我打开 Dokuwiki 上的所有 .js 文件,搜索“$(”并将其替换为“$DW(”,它就像一个魅力,但我必须处理每个包含 javascript 的 Dokuwiki 插件。
那么,如何更改原型库/ Dokuwiki 中的“$”?
Dokuwiki 我们的原型,我的网站使用 Jquery。
如果有另一种方法来改变 Dokuwiki javascript,而不是在我的 jQuery 上使用 jQuery.noConflict() 或/和 var $j = jQuery?
我打开 Dokuwiki 上的所有 .js 文件,搜索“$(”并将其替换为“$DW(”,它就像一个魅力,但我必须处理每个包含 javascript 的 Dokuwiki 插件。
那么,如何更改原型库/ Dokuwiki 中的“$”?
你做错了。只需在原型之后包含 jQuery,然后立即调用jQuery.noConflict()
. 在你的代码中总是写
jQuery(..)
/jQuery.[functionname](...)
而不是通常的$
符号。
这样您就可以保留整个现有的 dokuwiki javascript 源代码和所有现有的插件。您可以在代码中使用 jQuery。
或者,如果您仍然想要一个短句柄而不是编写 jQuery,您可以为 jQuery 创建一个别名
<script ... include prototype ..</script>
<script ... include jquery ..</script>
<script ...>
var jQ = jQuery.noConflict();
//do something with prototype
$("findme");
jQ("div hideme").hide();
</script>
有关更多信息,请检查jQuery.noConflict()
我这样做的方法是创建一个非常简单的“插件”,它除了在每个页面的标题部分中包含一个额外的 JS 文件之外什么都不做。
您需要做的就是添加一个新目录,在该目录下lib/plugins
包含一个“plugin.info.txt”(请参阅其他插件的示例)和一个名为“action.php”的文件(以及您要加载的任何文件,在此以 .js 文件为例)。
该“action.js”文件应该只包含一个扩展“ DokuWiki_Action_Plugin
”的类,具有两个功能:
首先,“注册”到,好吧,注册一个事件处理程序,用于何时输出元数据:
public function register(Doku_Event_Handler $controller) {
$controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this,
'handle_tpl_metaheader_output');
}
其次,实际的事件处理程序,很简单:
public function handle_tpl_metaheader_output(Doku_Event $event, $param) {
global $ID, $conf, $INFO;
if (page_exists($ID)) {
$event->data["script"][] = array (
"type" => "text/javascript",
"src" => DOKU_BASE."lib/plugins/[YOURPLUGINNAME]/[YOURJSFILENAME].js"
);
}
}
就是这样。然后在 JS 文件中随心所欲。
编辑:当然,您仍然需要使用“ jQuery()
”而不是“”来引用 jQuery $()
。