2010-02-02 2 views
2

Я пытаюсь добавить метод к элементу элемента prototype, который называется locateAncestor(), который найдет и вернет узел DOM на основе tagName. Мой код выглядит следующим образом:Prototype addMethods возвращает «undefined»

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() и успешно предупреждает идентификатор элемента (в данном случае - элемент FORM). Ниже этого первого предупреждения() я возвращаю «e» (который при применении alert() предупреждает «HTMLFormElement», как и ожидалось. Однако, когда эта функция вызывается, второе alert() возвращает «undefined», а не значение Я ожидаю, что будет возвращен, который, конечно, «HTMLFormElement».

некоторый важный шаг я здесь отсутствует, чтобы добавить метод, то, что я должен сделать, чтобы вернуть значение?

ответ

1

Вы возврат для каждой функции, но нет оператора возврата для функции locateAncestor. Также вы должны использовать «обнаружение» вместо «каждый», потому что вам нужен только один элемент из всего массива.

Element.addMethods({ 
locateAncestor: function(element,tag) { 
    return element.ancestors().detect(function(e) { 
     if (tag == e.tagName) { 
      alert(e.id); 
      return true; 
     } 
     return false; 
    }); 
}}); 
Смежные вопросы