【问题标题】:How jQuery selector elements are also jQuery objectsjQuery 选择器元素如何也是 jQuery 对象
【发布时间】:2014-02-25 10:04:31
【问题描述】:

我正在构建一个非常小的库/框架,作为我了解 jQuery 及其核心工作原理的旅程的一部分。

我想知道 jQuery 选择器元素如何也作为 jQuery 对象返回并具有 jQuery 的所有方法。例如:

$('ul li').each(function(){ console.log($(this)); })

$(this) 是对 DOM 元素

  • 的 jQuery 对象的引用,具有 jQuery 的所有方法。

    日志显示:

    [li, context: li, jquery: "2.1.0", constructor: function, selector: "", toArray: function…] 0: li context: li length: 1 __proto__: Object[0]

    这是 lib 的一小部分,说明了我如何处理初始化和 each 方法。

    (function( global, factory ) {factory( global );}
        (window, function( window ) {
            var document = window.document;
            var LibInit = function( selector ) {
                return new Lib( selector );
            };
            function Lib ( selector ) {
                this.selector = selector;
                return this;
            }
            Lib.prototype = {
                each: function(stack, callback) {
                    var i;
                    for ( i in stack ) {
                        if ( typeof stack[i] === 'object' )
                            callback(i, stack[i]);
                    }
                    return this;
                }
            }
            window.Lib = LibInit;
        }
    ));
    
    Lib().each(document.querySelectorAll('ul li'), function(i,v){
        console.log(v);
    })
    

    这个 Lib 每个都返回特定元素的直接 DOM 对象。 如何更改它以返回用 Lib 对象包装的 DOM 对象。

    对于复杂的解释我很抱歉,只是想不出更好的解释方式。

    也是一个附带问题。 $/jQuery 的 console.log 如何为 init 函数返回字符串,而 $.plugin 如何从原型返回一个方法。基本上没有 $ 的原型,因为 $ 是对未实例化的函数/对象的引用。

  • 【问题讨论】:

    • callback(i, $(stack[i]));??

    标签: javascript jquery dom


    【解决方案1】:
     for ( i in stack ) {
         if ( typeof stack[i] === 'object' )
             callback(i, new Lib(stack[i]));
         }
     }
    

    【讨论】:

    • 我怎么没想到这个...谢谢!还有关于附带问题的任何想法吗?或者我应该将其作为单独的问题发布
    猜你喜欢
    • 2019-05-21
    • 2011-10-23
    • 2022-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多