如果我有这个模块模式:
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());
我同意。除非绝对必要,否则这看起来很糟糕。
答案 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);
答案 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>