<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:http://imperavi.com/download/redactor/get/的WYSIWYG编辑器,其中包含:
...
(function($){
// Initialization
$.fn.redactor = function(options)
{ ... };
})(jQuery);
...当我评论"prototype.js“-一切正常(我看到"123456")。
与"prototype.js“-只看到"123”和“编者”不起作用。(这意味着名称空间工作正常,对吗?为什么第二个警报不起作用?)
当我只评论$jq(document).ready(function(){并在调用之前移动"redactor.js“(调用"redactor()”而不等待DOM) --一切都很好。
我不明白这个原则。在包含"jquery.js“之后,我首先"$”覆盖,然后包含"prototype.js“以避免冲突。但是Namespace仍然与Prototype交叉。我怀疑错误就在这里:$jq("#redactor_content").redactor();和我需要做一些类似于:.redactor($jq);的事情,但是它打破了我的头,我无法猜测。
P.S.:是的,我读了文档( http://docs.jquery.com/Using_jQuery_with_Other_Libraries ),并尝试了不同的方法(交换库和尝试$.noConflict,jQuery(document).ready...) )。我写了一个例子,任何事情都在起作用,而且有些清晰。
我的第二个问题:它会一起工作吗:jQuery(document).ready(function()和Prototype的document.observe("dom:loaded", function(),如果没有,如何一起工作?
谢谢。
发布于 2011-10-09 11:03:39
试着替换
<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>发布于 2011-10-09 11:03:40
据我所见,这应该行得通。唯一可能出错的地方是redactor.js需要代码中的$赋值(这可能是一个错误),但是它似乎正确地处理了这个问题。
您可以先加载prototype,然后加载jquery + redactor.js,然后使用jQuery.noConflict() (在本例中将$-operator切换回前一个值prototype )来测试这个问题。
顺便说一句,如果第二个警报没有弹出,我预计控制台会出现一些错误,这也是相关的信息。
关于你的第二个问题:是的,这两种方法都应该很好。但你当然只需要一个:)。
https://stackoverflow.com/questions/7702881
复制相似问题