<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» — это WYSIWYG-редактор на основе JQuery: http://imperavi.com/download/redactor/get/ с этим источником:
...
(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», чтобы избежать конфликтов. Но пространство имен 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()
, и если НЕТ, как заставить работать вместе?
Спасибо.