document.getElementById是一个可以链接的方法吗?

时间:2017-03-21 17:59:53

标签: javascript chaining module-pattern

如果我有这个模块模式:

var MODULE = (function(window){
    var myPublicStuff = {};

    myPublicStuff.myPublicMethod = function(e){
        return e;
    };
    return myPublicStuff;

})(window);  //edit:  forgot to put I have this

这有效:(为清晰起见而编辑)

v = document.getElementById('some-element'); //works as expected
MODULE.myPublicMethod(v);  //works.

但这不起作用,

MODULE.myPublicMethod().document.getElementById('some-element');

document.getElementById('some-element').MODULE.myPublicMethod().

我认为如果jail中的前一个成员返回一个值,你可以将它链接到下一个链接吗?这在这里不起作用,但我不知道为什么。

编辑:感谢您的所有答案。我尝试做的就是获取元素并让该方法通过链接将其打印出来。这就是全部。如果我放入&#39; btnPrint&#39;我希望它能给我<button type="button" id="btnPrint" class="btn">...</button>如果我在控制台上运行getElementById,那就是我先得到一个变量用于我的模块(这是有意义的。)我只想用链式做同样的事情方法

编辑:为了完整性,这是Travis在JSFiddle上所做的内容(谢谢):

<button type="button" id="btnPrint" class="btn">...</button>

Element.prototype.myPublicMethod = function(){
 //in the prototype scheme that JavaScript uses,
 //the current instance of the Element is *this*,
 //so returning this will return the current Element
 //that we started with.
 return this;

}

console.log(document.getElementById("btnPrint").myPublicMethod());

我同意。除非绝对必要,否则这看起来很糟糕。

3 个答案:

答案 0 :(得分:2)

要避免v变量,您需要使用

MODULE.myPublicMethod(document.getElementById('some-element'));

document是(window对象的)全局属性,您需要从myPublicMethod()返回该链接。鉴于它是身份功能,您甚至可以执行类似

的操作
MODULE.myPublicMethod(document).getElementById('some-element');
MODULE.myPublicMethod(window).document.getElementById('some-‌​element');

答案 1 :(得分:1)

如果没有参数传递,您可以从函数返回document

var MODULE = (function(window){
    var myPublicStuff = {};

    myPublicStuff.myPublicMethod = function(e){
        return e || document;
    };
    return myPublicStuff;

})();

var text = MODULE.myPublicMethod().getElementById('element').innerHTML;

console.log(text);

JSBin

答案 2 :(得分:1)

  

document.getElementById是一个可以链接的方法吗?

是。它返回一个Element(如果没有匹配则返回undefined)。 Element公开了一组通用函数,如果元素是特定类型(例如表单),那么它也可能暴露一组特定的函数。

详细了解https://developer.mozilla.org/en-US/docs/Web/API/Element

上的通用元素类型
  

我想这样做:

v = document.getElementById('some-element'); //works as expected
MODULE.myPublicMethod(v);

在这里,v很简单,对吧?它只是获得id="some-element"的元素。好的,从那里你把它传递到myPublicMethod(v)。当你这样做时,你所做的只是调用一个返回传入的相同值的函数。除此之外,你上面显示的代码中没有任何赋值或存储。

在这里做了什么,如果你想利用链接设置,那么就可以从返回的值中访问v元素,如下所示:

v = document.getElementById('some-element');
var vId = MODULE.myPublicMethod(v).id;
console.log(vId);// this will log "some-element" to the console
  

但这不起作用,

 MODULE.myPublicMethod().document.getElementById('some-element');

所以上面我解释说你正在“调用一个返回相同值的函数”,请记住myPublicMethod中只有return e;吗?那么这意味着您使用undefined作为结果,因为使用这行代码没有传递任何内容。换句话说,您上面的代码可以检查为undefined.document.getElementById('some-element'),这有望显然存在问题。

  

如果我输入'btnPrint',我希望它能给我<button type="button" id="btnPrint" class="btn">...</button>

例如,您编写的代码将完成此操作:

var MODULE = (function(window){
    var myPublicStuff = {};

    myPublicStuff.myPublicMethod = function(e){
        return e;
    };
    return myPublicStuff;
})(window);

console.log(MODULE.myPublicMethod(document.getElementById('btnPrint')));
<button type="button" id="btnPrint" class="btn">...</button>