为什么我无法在v3中将普通变量转换为jQuery对象?

时间:2019-07-17 22:39:51

标签: javascript jquery

我们刚刚将jQuery版本从v1.7升级到了v3.4.1。我们有将jQuery对象(在DOM中尚不存在,而我猜是此问题的根本原因)传递给函数的代码。但是,当尝试处理此新创建的变量时,它仅返回jQuery根函数本身:jQuery.fn.init {}

这个SO答案帮助我意识到了这个问题:Help understanding jQuery's jQuery.fn.init Why is init in fn

实际代码段:

create: function (params) {
        console.log('params.target:', params.target);
        var $target, id;

        if (_.isString(params.target)) {
            if (params.target.charAt(0) === '#') {
                $target = $('#send-to-friend-dialog');
                console.log('$target1: ', $target);
            } else {
                $target = $('#' + params.target);
            }
        } else if (params.target instanceof jQuery) {
            $target = params.target;
        } else {
            $target = $('#dialog-container');
        }

        console.log('$target.length: ', $target.length)

        // if no element found, create one
        if ($target.length === 0) {
            console.log('$target2 : ', $target);
            if ($target.selector && $target.selector.charAt(0) === '#') {
                id = $target.selector.substr(1);
                $target = $('<div>').attr('id', id).addClass('dialog-content').appendTo('body');
            }
        }

        // create the dialog
        console.log('$target3: ', $target);
        this.$container = $target;
        this.$container.dialog($.extend(true, {}, this.settings, params.options || {}));
        return this.$container;
    },

v1.12.4中的输出: https://i.imgur.com/4xg1u1s.png

v3.4.1中的输出: https://i.imgur.com/QPITza9.png

因此,尽管定义了该对象,但在两个版本中,对象本身都是非常不同的输出,我想知道为什么吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

jQuery的.selector属性在1.7中已弃用,在3.0中已删除。参见https://api.jquery.com/selector/。这是一个内部接口,不适合应用程序使用。

您将需要重新设计代码,因此不需要它。该文档提出了一种替代方案:

  

例如,一个“ foo”插件可以写为$.fn.foo = function( selector, options ) { /* plugin code goes here */ };,并且使用该插件的人将用重复的$( "div.bar" ).foo( "div.bar", {dog: "bark"} );选择器写为"div.bar"作为{{ 1}}。