Object 添加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

我有一个名为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 < 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完全相同