2012-04-05 122 views
5

Vì vậy, tôi đang làm việc trên một trang web sử dụng cả jQuery và prototype.js, tuy nhiên xung đột của họ.

Tôi đã nghiên cứu một chút công bằng và phát hiện ra rằng cách mọi người chỉ khắc phục vấn đề này là sử dụng

<script> 
jQuery.noConflict(); 

// Use jQuery via jQuery(...) 
jQuery(document).ready(function(){ 
    jQuery(\"div\").hide(); 
}); 

// Use Prototype with $(...), etc. 
$('someid').hide(); 

Tuy nhiên tôi không muốn thay đổi $ để jQuery như có nghĩa là tôi 'd phải chỉnh sửa một chút công bằng của mã được viết trước. Có cách nào để ngăn chặn chúng xung đột và để lại jQuery là $?

+0

Bạn có hỏi bạn có thể có, trong cùng phạm vi, $ có nghĩa là hai điều khác nhau không? – Iznogood

+0

Anh ấy hỏi nếu có phiên bản Nguyên mẫu của 'noConflict()'. –

+0

có thể trùng lặp của [Xung đột jQuery & Prototype] (http://stackoverflow.com/questions/134572/jquery-prototype-conflict) – jrummell

Trả lời

9

Thay vì sử dụng tài liệu đã sẵn sàng, bạn có thể tạo ra một kết thúc (ở phần cuối của các body) như:

(function($) { 
    //jQuery stuff 
    $('.elem') // $ refers to jQuery 
})(jQuery); 

Nếu tôi hiểu câu hỏi của bạn một cách chính xác

+0

Ồ, ai đó đã đăng cùng một câu trả lời. – rgin

+0

Quyết định đi với điều này, tuy nhiên prototype.js gây phiền nhiễu là hiển thị một lỗi ngay bây giờ .. –

+0

Oh có chúng tôi đi, cố định nó, cảm ơn cho tất cả mọi người giúp đỡ! –

6

Không, không phải là tôi đã nghe nói đến. Để giảm thiểu đau chuyển đổi mã bạn có thể làm một cái gì đó giống như mặc dù điều này:

var j$ = jQuery.noConflict(); 

Sau đó, bạn có thể thay thế jQuery $ cuộc gọi với j$. Bạn thậm chí có thể sử dụng một cuộc gọi tìm kiếm/thay thế đơn giản.

+0

Tôi nghĩ điều này đã gây ra vấn đề biến cục bộ và toàn cục nên quyết định đi với một ở trên, cảm ơn tho! –

2
(function($){ 
    // $('jquery here') 
})(jQuery); 

Tất cả các mã jquery bên trong hàm có thể sử dụng $.

0

Có một cách đơn giản để làm điều này bằng cách gói mã allready của bạn vào một hàm và chuyển jQuery vào nó. Bằng cách đó bạn có thể giữ mã allready của bạn bằng văn bản và sử dụng jQuery làm định danh chỉ cho mã mới:

Điều đó sẽ hiệu quả.

Mặt khác: thay thế $ bằng jQuery dường như không phải là một nhiệm vụ để thay thế tự động.

0

Mặc dù đó là một bài đăng cũ nhưng tôi chính xác có cùng một kịch bản vấn đề. Có rất nhiều tùy chọn để xử lý. Tôi sẽ không chạm vào mã được viết sẵn và để nguyên mẫu js sử dụng $.

Từ jQuery documentation

<!-- Loading jQuery before other libraries. --> 
<script src="jquery.js"></script> 
<script src="prototype.js"></script> 
<script> 

// Use full jQuery function name to reference jQuery. 
jQuery(document).ready(function() { 
    jQuery("div").hide(); 
}); 

// Use the $ variable as defined in prototype.js 
window.onload = function() { 
    var mainDiv = $("main"); 
}; 

</script> 

Dưới đây là tất cả các tùy chọn có sẵn.

https://learn.jquery.com/using-jquery-core/avoid-conflicts-other-libraries/