我正在尝试向原型的Element对象添加一个名为locateAncestor()的方法,该方法将根据tagName查找并返回DOM节点。我的代码如下:
Element.addMethods({
locateAncestor: function(element,tag) {
element.ancestors().each(function(e) {
if (tag == e.tagName) {
alert(e.id);
return e;
}
});
}});
然后我调用这样的代码:
var form = target.locateAncestor('FORM');
alert(form);
这当然会触发两个alert()框。第一个,在each()循环内部调用,并成功警告元素的ID(在本例中为FORM元素)。在第一个alert()下面,我返回“e”(当应用alert()时,警告“HTMLFormElement”,正如预期的那样。但是,当调用此函数时,第二个alert()返回“undefined”,而不是值我希望能够返回,当然这是“HTMLFormElement”。
在这里我是否缺少一些重要的步骤来添加一个方法,我必须做些什么才能返回一个值?
答案 0 :(得分:1)
您有每个函数的return语句,但没有locateAncestor函数的return语句。你也应该使用“detect”而不是“each”,因为你只需要整个数组中的一个项目。
Element.addMethods({
locateAncestor: function(element,tag) {
return element.ancestors().detect(function(e) {
if (tag == e.tagName) {
alert(e.id);
return true;
}
return false;
});
}});