2015-05-20 12 views
6

Aşağıdaki özyinelemeli giriş denetleyicisini yazdım ve benim için çalışıyor. Her dom elemanını ziyaret etmek ve bir giriş alanı olup olmadığını kontrol etmek ve doğrulamak için daha iyi bir yol var mı?HTML giriş elemanlarını yinelemeli olarak doğrulamak

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 

} 
+2

Sorunun doğası bir sorundan ziyade iyileştirme aramak olduğundan, bu soru [kod inceleme yığını değişimi] (http://codereview.stackexchange.com) için daha uygun olabilir. –

+0

Oh, kod incelemesinin bir şey olduğunu bile bilmiyordum. Gönderiyi buraya taşıyabilir miyim veya birisi benim için taşıyabilir mi? – dimlee

+0

Gönderinizi buradan silebilir ve orada yeniden yazabilirsiniz (tercih edilen) veya bir moderatörün dikkatini çekmek için bayrak taşıyıp taşımasını isteyebilirsiniz (muhtemelen aşırı çalışan moderatörler için daha fazla çalışacağından emin olun). - şimdi bir cevabınız var, sizce ** bunu silebilirsiniz. –

cevap

4

daha iyi daha az ayrıntılı demek suretiyle bu

parent.find('*') 

*(all-selector) kullandığı için özyineleme gerek burada olmadığı işlevsel

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 

Bildirim denktir. Bu tüm çocukları ve yuvalanmış çocukları alacak. Hatta

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

Bu cevabı beğeniyorum ama daha verimli olacağımı merak ediyorum. – dimlee

+0

@dimlee, bir performans artışı için güncellenmiş yanıtıma bakın – AmmarCSE

+0

'type' kontrolünden 'parent.find (' input: text ') ...' –

3
kontrol etmek zorunda olmayacak şekilde

Güncelleme

performansını artırmak için, ayrı bir özel görünüme yukarıda

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

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

Bu tüm iç içe input unsurları alacak

Daha dar bir seçici kullanıyorum:

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

Bu, OP'nin kod işleyen ('if ($ (this) .is (" input "))'), "ana" nin ani çocukları olan girdileri hariç tutar. 'Children()' yöntemini kaldırarak düzeltebilirsiniz. –

İlgili konular