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
});
