2

如果我在一个对象下设置一个函数,我只能使用它一次

function handle(selector)
{
    return{
        elem:selector,
        next:function(){
            return (this.nextSibling.nodeType==1) ? this.nextSibling : this.nextSibling.nextSibling;
        }
    }
} 

在这里我可以说handle.next()这会起作用,但如果我想说handle.next().next().next()我的问题是如何像 jquery 那样以这种方式使用?

4

1 回答 1

1

谈到您的功能,您可以像这样修改它以使其工作:

function handle(selector)
{
    if (typeof selector === 'string') {
        selector = document.querySelector(selector);
    }
    return{
        elem:selector,
        next:function(){
            return handle(selector.nextElementSibling);
        }
    }
} 

jsfiddle

UPD:修改了代码以支持元素和字符串选择器作为参数。

UPD 2:推出了另一种变体。在这种情况下,我们扩展原生 html 元素对象并添加新的next方法:

function handle(selector)
{
    if (typeof selector === 'string') {
        selector = document.querySelector(selector);
    }
    selector.next = function() {
        return handle(selector.nextElementSibling);
    };
    return selector;
}

小提琴在这里

于 2015-04-06T21:19:27.237 回答