En una clase de JavaScript que escribí, uso una versión específica cargada dinámicamente de JQuery (versión 3.2.1). Yo uso esa versión cargada dinámicamente en modo de compatibilidad.
No estoy seguro si el selector "generado" en modo de compatibilidad y pasado como argumento a una función, también usará el modo de compatibilidad (mi propia versión en lugar de la original).
Aquí el código:
function toggleFunction ( jQuerySelectorItem ) { //hide all $jq_321(".class").hide(); var checkBoxes = $jq_321(".class[rel-data='" + jQuerySelectorItem.attr("rel-data") + "'] input"); // <<<<< is this 'jQuerySelectorItem' still use jQuery 3.2.1 if generated by '$jq_321' selector ? if (jQuerySelectorItem.is(":checked")) { checkBoxes.toArray().forEach ( item => this.__changeDependantCheckBoxStatus(item, true)); } else { checkBoxes.toArray().forEach ( item => this.__changeDependantCheckBoxStatus(item, false)); } $jq_321(".class[rel-data='" + jQuerySelectorItem.attr("rel-data") + "']").show(); }Así es como cargo dinámicamente la versión correcta de JQuery en modo de compatibilidad antes de usarlo:
window.onload = (event) => { var jqScriptTag = document.createElement("script"); jqScriptTag.src = 'https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js'; jqScriptTag.onload = function() { console.log('Temporary jQuery version : ' + jQuery.fn.jquery); $jq_321 = jQuery.noConflict(true); console.log('Restored original jQuery version : ' + jQuery.fn.jquery); //other code that will indeed call toggleFunction when needed }; document.head.appendChild(jqScriptTag); };Aquí el registro de la consola:
Versión temporal de jQuery: 3.2.1
Versión original restaurada de jQuery: 1.4.2
El .fn. es una forma de acceder a los métodos jquery sin un objeto jquery, lo que llama selector "generado" .
También puede llamar a la parte después de .fn. en cualquier objeto jquery, por ejemplo:
console.log($("div").jquery) <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div></div>Entonces puede verificar fácilmente qué versión es su objeto jquery (selector generado):
console.log(d331.jquery) console.log(d123.jquery) <div id="div1"></div> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script> var d331 = $("#div1"); </script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script> <script> var d123 = $("#div1"); </script>Siempre que sus funciones usen métodos jquery que existen en ambos, no tendrá ningún problema (en su función).