在兼容模式下正确使用 JQuery

Correct use of JQuery in compatibility mode

我写了 javascript class 我使用了 JQuery 的特定动态加载版本(版本 3.2.1)。 我在兼容模式下使用动态加载的版本。

如果选择器在兼容模式下“生成”并作为参数传递给函数,我不会感到痛苦,也将使用兼容模式(我自己的版本而不是原始版本)。

这里是代码:

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();
}

以下是我如何在使用前以兼容模式动态加载 JQuery 的正确版本:

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);
};

这里是控制台日志:

Temporary jQuery version : 3.2.1

Restored original jQuery version : 1.4.2

.fn. 是一种在没有 jquery 对象的情况下访问 jquery 方法的方法,您正在调用 选择器“生成” .

您也可以在任何 jquery 对象上调用 .fn. 之后的部分,例如:

console.log($("div").jquery)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div></div>

因此您可以很容易地检查您的 jquery 对象(生成的选择器)是哪个版本:

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>

只要您的函数使用 jquery 两者都存在的方法,您就不会遇到问题(在您的函数中)。