Object 添加js方法
我有一个名为getID的js函数,它基本上是Object 添加js方法,object,javascript,Object,Javascript,我有一个名为getID的js函数,它基本上是returndocument.getElementById(id) 我想创建另一个函数,getTag,它将返回getElementsByTagName 我似乎无法管理的部分是,我希望能够这样称呼他们: var inputs = getEl().by({id:"msg", tag:"input"}); var elements = MyLib.getID('myid').getTag('input'); for (var i = 0; i < el
returndocument.getElementById(id)
我想创建另一个函数,getTag,它将返回getElementsByTagName
我似乎无法管理的部分是,我希望能够这样称呼他们:
var inputs = getEl().by({id:"msg", tag:"input"});
var elements = MyLib.getID('myid').getTag('input');
for (var i = 0; i < elements.length; i++)
console.log(elements[i]); // Do something
getTag('input')=>因此这将返回元素中id为myid的所有输入元素
谢谢
ps:getTag如果由它自己调用也必须工作,但它只会返回document.getElementsByTagName
更新:
感谢所有的回复!根据你的建议,我想出了一个对我很有效的方法:
function getEl(){
return new getElement();
}
function getElement() {
var scope = document;
this.by = function(data){
if (data.id) scope = scope.getElementById(data.id);
if (data.tag) scope = scope.getElementsByTagName(data.tag);
return scope;
}
}
函数getEl(){
返回新的getElement();
}
函数getElement(){
var范围=文件;
this.by=函数(数据){
if(data.id)scope=scope.getElementById(data.id);
if(data.tag)scope=scope.getElementsByTagName(data.tag);
返回范围;
}
}
我是这样用的:
var inputs = getEl().by({id:"msg", tag:"input"});
var elements = MyLib.getID('myid').getTag('input');
for (var i = 0; i < elements.length; i++)
console.log(elements[i]); // Do something
var inputs=getEl().by({id:“msg”,tag:“input”}) 这将要求
getID('myid')
(一个HTML元素)返回的任何内容都公开一个名为getTag()
的方法。事实并非如此。浏览器实现DOM规范并公开其中定义的方法
虽然从技术上讲,您可以使用自己的方法增强本机对象,但最好不要这样做
在jQuery这样的JS库中,您尝试做的事情已经很好地解决了,我建议您在花时间模仿它们的功能之前先看看其中的一个。例如,您的代码行将变成:
$("#myid input")
在jQuery中。jQuery恰好是使用最广泛的JS库,还有许多其他库。实现这一点的方法是对对象进行原型化。为此,您需要以下代码: Object.prototype.getTag = function(tagName) { return this.getElementsByTagName(tagName); } Object.prototype.getTag=函数(标记名){ 返回此.getElementsByTagName(标记名); } 但是,这将扩展所有对象,因为您真正需要的原型是HTMLElement,很难始终如一地完成。所有的专家都同意你应该这样做。更好的解决方案是创建一个从另一个参数获取标记名的函数: function getTag(tagName, element) { return (element || document).getElementsByTagName(tagName); } // Usage var oneTag = getTag('input', getID('myid')); // All inputs tags from within the myid element var twoTag = getTag('input'); // All inputs on the page 函数getTag(标记名,元素){ return(元素| |文档).getElementsByTagName(标记名); } //用法 var oneTag=getTag('input',getID('myid'));//myid元素中的所有输入标记 var twoTag=getTag('input');//页面上的所有输入
只需使用
domeElement.prototype
属性
你会得到这样的结果:
function getTag(tagName) {
return document.getElementsByTagName(tagName);
}
DOMElement.prototype.getTag = function(tagName) {
return this.getElementsByTagName(tagName);
}
但是您应该使用jQuery来实现这一点
编辑:对不起,我的解决方案在IE上不起作用 您可以将其定义如下:
var Result = function(el)
{
this.Element = el;
};
Result.prototype.getTag = function(tagName)
{
return this.Element.getElementsByTagName(tagName);
};
var getTag = function(tagName)
{
return document.getElementsByTagName(tagName);
};
var getID = function(id)
{
var el = document.getElementById(id);
return new Result(el);
};
通过调用getID
将返回Result
的实例,然后可以使用其元素
属性访问返回的HTML元素。Result
对象有一个名为getTag
的方法,该方法将从父结果返回与该标记匹配的所有子元素。然后,我们还定义了一个单独的getTag
方法,该方法调用文档元素的getElementsByTagName
尽管如此…JQuery还是简单得多<代码>$(“myId输入”)代码>基本上,您将创建一个包含每个方法的对象,并存储本机函数返回的所有数据。它看起来像这样(没有经过测试,但你知道了):
jQuery比您想象的更轻量级,在页面中包含它不会降低速度。使用它不会有任何损失。除非这是一个关于如何在JavaScript中链接方法的学术练习(看起来不是,你只是在学习JavaScript),否则你所要做的就是:
var elements = document.getElementById("someIdName");
var elementsByTag = elements.getElementsByTagName("someTagName");
for (i=0; i< elementsByTag.length; i++) {
alert('found an element');
}
var elements=document.getElementById(“someIdName”);
var elementsByTag=elements.getElementsByTagName(“someTagName”);
对于(i=0;i
如果要定义可重用函数,只需执行以下操作:
function myFunction(idName,tagName) {
var elements = document.getElementById(idName);
var elementsByTag = elements.getElementsByTagName(tagName);
for (i=0; i< elementsByTag.length; i++) {
alert('found a ' + tagName + ' element within element of id ' + idName);
}
}
函数myFunction(idName,标记名){
var elements=document.getElementById(idName);
var elementsByTag=elements.getElementsByTagName(标记名);
对于(i=0;i
确实,如果这是页面上所需的全部JavaScript功能,则无需导入jQuery。总是有一个项具有唯一ID,因此getID('myid')将永远不会返回集合?问题是,您不能让函数根据使用方式更改其返回类型,所以你必须用一些诡计来解决这个问题。为了便于参考,请看一下它是如何工作的。@caspar:是的,只有一个element@musicfreak:我真的不需要jQuery的复杂性,它只是一个简单的script@Sorin:如果它只是一个简单的脚本,那么你为什么需要“语法糖”呢?这是纯粹的虚荣(“但我希望它这样工作,因为它看起来更好”)还是有任何技术原因,你不能简单地使用已有的方法?+1表示迷你库方法:但是,
getTag()
函数是否应该对getID()
返回的元素不起作用,而不是使用document
?另外,getID()
应该只对getTag()
返回的元素起作用,如果调用是另一种方式…@Tomalak:Oops,你说得对,我忘记了最重要的部分!哦!我修好了,谢谢你指出这一点。:)尽管在getTag
之后调用getID
是无用的,但它仍然有效,应该得到支持,依我看。毕竟,你可以在jQuery中调用$('div#myid')
。另外,不需要更多的代码来支持这种情况——它的行为与ca完全相同