1

Dokuwiki 我们的原型,我的网站使用 Jquery。

如果有另一种方法来改变 Dokuwiki javascript,而不是在我的 jQuery 上使用 jQuery.noConflict() 或/和 var $j = jQuery?

我打开 Dokuwiki 上的所有 .js 文件,搜索“$(”并将其替换为“$DW(”,它就像一个魅力,但我必须处理每个包含 javascript 的 Dokuwiki 插件。

那么,如何更改原型库/ Dokuwiki 中的“$”?

4

2 回答 2

1

你做错了。只需在原型之后包含 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()

于 2010-03-09T08:33:45.400 回答
0

我这样做的方法是创建一个非常简单的“插件”,它除了在每个页面的标题部分中包含一个额外的 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 $()

于 2020-10-16T11:06:58.737 回答