Estoy trabajando en un proyecto en el marco de los usos de jQuery 1.3.2 y jQueryUI 1.7.2.

La actualización de las versiones en el marco no es una posibilidad, así que quería ejecutar jQuery 1.4.4 y jQueryUI 1.8.5 en paralelo.

He visto que las diferentes versiones de jQuery se puede utilizar en paralelo así:

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>  
    <script type="text/javascript">
        var j$132 = $.noConflict(true);
    </script>

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
    <script type="text/javascript">
        var j$144 = $.noConflict(true);
    </script>

Pero esto también es cierto para la el siguiente:

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js"></script> 
    <script type="text/javascript">
        var j$132 = $.noConflict(true);
    </script>

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.5/jquery-ui.min.js"></script>
    <script type="text/javascript">
        var j$144 = $.noConflict(true);
    </script>
  • El segundo bloque de código hace realmente el trabajo con CDN fuentes, sí, y se basa en el hecho de que la referencia a jQuery se borra antes de cargar la segunda versión. Es equivalente a la aceptada respuesta.
  • Así jqueryui v1.7.2 uso de la j$132 y jqyeryui v1.8.5 uso de la j$144? Lo siento si es una pregunta tonta
InformationsquelleAutor RyanP13 | 2010-11-18

3 Comentarios

  1. 12

    AFAIK, no hay $.noConflict() equivalente de jQuery UI. Sin embargo, puede utilizar una copia local de jQuery UI y envuelva todo el JS usando una táctica similar a lo que se utiliza para asignar un alias a las diferentes bibliotecas:

    (function(jQuery) {
      //... the jQuery UI lib code for jQuery 1.3.2
    })(j$132);

    Esto podría ser elegantemente implementado usando un server-side script de compilación o de un controlador que sirve el JS archivos, pero envuelve el contenido con el código anterior.

    No he probado este enfoque, por lo que puede que tenga que jugar un poco con el parámetro de la función (aunque creo que es seguro asumir que utiliza jQuery para hacer referencia a jQuery dentro del plugin de código).

    La forma en que usted utilice este es declarar las dos versiones de jQuery:

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>  
    <script type="text/javascript">
        var j$132 = $.noConflict(true);
    </script>
    
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
    <script type="text/javascript">
        var j$144 = $.noConflict(true);
    </script>

    … y, a continuación, incluir su código de interfaz de usuario, como he especificado anteriormente.

    Y no, usted no puede hacer esto haciendo referencia a la interfaz de usuario JS archivos de Google CDN.

    EDICIÓN: El segundo bloque de código en cuestión es en realidad una solución mejor que esta respuesta, ya que no requieren de envoltura de la interfaz de usuario original de código en un auto de ejecución de la función y la superación de la versión específica. Ambos enfoques resultan exactamente en el mismo estado en la página.

    • Esto destruye por completo el propósito de la envoltura, que es la captura de la referencia a jQuery antes de la llamada a jQuery.noConflict(true). jQuery interfaz de usuario está diseñado para apoyar esta fuera de la caja. La implementación propuesta en la pregunta en realidad es correcto y funciona bien.
    • Así jqueryui v1.7.2 uso de la j$132 y jqyeryui v1.8.5 uso de la j$144? Lo siento si es una pregunta tonta
  2. 1

    Llegué a esta página porque tengo el mismo problema como se describe en la pregunta original, pero la respuesta no resuelve completamente de ella (ya).

    Tuve que agregar un auto suggest a una página que tiene un montón de código existente con jquery, no era fácil acaba de actualizar a la nueva jquery y jquery ui, así que trató de utilizar la versión más reciente junto a la antigua.

    Además de la edición del jqueryui última línea de la interfaz de usuario jquery tiene un montón de jQuery referencias que usted necesita para cambiar así como así que he usado un editor que puede reemplazar el uso de la expresión regular y sustituido:
    \bjQuery\b
    con
    j$182

    Una en la página he añadido:

    <script src="http://code.jquery.com/jquery-1.8.2.js"></script>
        <script type="text/javascript">
            var j$182 = $.noConflict(true);
            </script>
    <script type="text/javascript" src="jqueryui1.9.0.js"></script>

    Ahora tanto la secuencia de comandos existente en la página y el nuevo auto sugieren están trabajando.

  3. 0

    Me di cuenta de una solución y funciona para mí.

    En la biblioteca Jquery, después de la última línea tipo

    var mySelector = $;

    Incluyen la otra versión después de incluir esto en su página.

    ahora, en todas las secuencias de comandos que desea utilizar con esta versión de jquery(incluso de interfaz de usuario jquery y otras librerías también), reemplazar $ con mySelector. Uso replaceall, habrá un par de lugares, como en regex partido de funciones en el que se quiera reemplazar mySelector a $. Este problema estaba molestando por un tiempo bastante largo. Y simplemente se quedó resuelto.

    EDITADO : asegúrese de que usted no reemplazar los $ dentro de la jQuery script original.

Dejar respuesta

Please enter your comment!
Please enter your name here