如果你想用元素链接你的函数,那么你需要扩展 HTMLElement 或 Node 对象的原型:
HTMLElement.prototype.myFunction = function (parameters) {
var elementToActOn = this;
elementToActOn.style.color = 'green';
return this; // for further chaining
}
或者:
Node.prototype.myFunction = function (parameters) {
var elementToActOn = this;
elementToActOn.style.color = 'green';
return this; // for further chaining
}
使用这种方法this,在myFunction() 方法中,将引用由以下对象选择的元素:
document.getElementById('elementID').myFunction();
JS Fiddle demo,使用HTMLElement 原型。
JS Fiddle demo,使用 Node 原型。
同样,如果您只想将元素节点传递给函数而不“显式”地将其作为参数传递:
function myFunction () {
this.style.color = 'red';
}
document.getElementById('elementID').addEventListener('click', myFunction);
JS Fiddle demo.
如果您希望对getElementsByTagName()、getElementsByClassName() 或querySelectorAll()(以及其他)选择的多个元素进行操作,那么您需要扩展NodeList 原型,例如:
NodeList.prototype.myFunction = function (parameters) {
var elements = this;
[].forEach.call(elements, function(a){
a.style.color = 'green';
});
return this; // for chaining
}
/* calling the function, with a simple demonstration of why you might want to
chain, by returning 'this': */
var len = document.getElementsByClassName('elementClass').myFunction().length;
console.log(len);
JS Fiddle demo.