javascript - Validera HTML-inmatningselement rekursivt


Jag har skrivit följande rekursiva inmatningsvalidator och den fungerar för mig. Finns det ett bättre sätt att besöka varje DOM-element och kontrollera om det är ett inmatningsfält och validera det?

function formValidator(parent)
{
    //base case no children
    if( parent.children().length == 0)
        return

    //recurse through each childs' child
    parent.children().each(function(){
        formValidator($(this));

    /**
    * Work : check if this node is an input node
    */
        if($(this).is("input"))
        {
            var type = $(this).attr('type');

            if(type =="text")
              //do work bro

        }

   });//end for each

}

Svar #1

Om du med bättre menar mindre ordrik, är detta funktionellt ekvivalent

parent.find('*').each(function(){
    /**
    * Work : check if this node is an input node
    */
        if($(this).is("input"))
        {
            var type = $(this).attr('type');

            if(type =="text")
              //do work bro

        }

   });//end for each

Observera att det inte finns något behov av rekursion här eftersom

parent.find('*')

använder *(all-selector). Detta kommer att hämta alla barn och nästlade barn.

Uppdatering

För att förbättra prestanda kan du refaktorera ovanstående till

parent.find('input[type="text"]').each(function(){
        var type = $(this).attr('type');

                //if(type =="text")
                  //above no longer needed
       });//end for each

Detta kommer att hämta alla nästlade input-element så du behöver inte ens kontrollera för

if($(this).is("input"))

Svar #2

Jag skulle använda en smalare väljare:

parent.children().find("input:text").each(function(){
    // Valid $(this) element to validate
});