<script src="jquery.js"></script>
<script>
var $jq = jQuery.noConflict();
$jq(document).ready(function(){
alert("123");
$jq("#redactor_content").redactor();
alert("456");
});
</script>
<script src="prototype.js"></script>
<script src="redactor.js"></script>
“redactor.js”是基于JQuery的WYSIWYG编辑器:http://imperavi.com/download/redactor/get/带有该源:
...
(function($){
// Initialization
$.fn.redactor = function(options)
{ ... };
})(jQuery);
...
当我评论“prototype.js”时 - 一切正常(我看到“123456”)。
使用“prototype.js” - 仅查看“123”,“redactor”不起作用。 (这意味着命名空间正常工作,对吧?为什么第二个警报不起作用?)
当我只评论$jq(document).ready(function(){
并在调用之前移动“redactor.js”(在不等待DOM的情况下调用“redactor()
”) - 一切都很好。
我不明白这个原则。在包含“jquery.js”后,我首先“$”覆盖,然后包含“prototype.js”以避免冲突。但Namespace Jquery仍然与Prototype相交。我怀疑这个错误在某处:$jq("#redactor_content").redactor();
我需要做一些像:.redactor($jq);
这样的事情,但它让我头疼,我无法猜测。
PS:是的,我阅读了文档(http://docs.jquery.com/Using_jQuery_with_Other_Libraries)并尝试了不同的方式(交换库并尝试$.noConflict
,jQuery(document).ready...)
。我写了一个例子任何事情都有效,而且有一定的清晰度。
我的第二个问题:它会一起工作:jQuery(document).ready(function()
和Prototype的document.observe("dom:loaded", function()
如果不是,如何一起工作?
感谢。
答案 0 :(得分:1)
尝试替换
<script>
var $jq = jQuery.noConflict();
$jq(document).ready(function(){
alert("123");
$jq("#redactor_content").redactor();
alert("456");
});
</script>
与
<script>
(function($){
$(document).ready(function(){
alert("123");
$("#redactor_content").redactor();
alert("456");
});
})(jQuery);
</script>
答案 1 :(得分:0)
据我所知,这应该有效。唯一可能出错的是redactor.js需要在其代码中的某个地方使用$ -assignment(这可能是一个bug),但似乎正确处理了这个问题。
你可以先测试一下,然后再加载jquery + redactor.js,然后使用jQuery.noConflict()(将$ -operator切换回前一个值,本例中为原型)。
顺便说一句,如果第二个警报没有弹出,我会在控制台中出现一些错误,这也是相关的信息。
对于你的第二个问题:是的,两种方法都应该可以正常工作。但你当然只需要1:)。