2015-05-20 14 views
6

Tôi đã viết trình xác nhận nhập đệ quy sau đây và nó hoạt động cho tôi. Có cách nào tốt hơn để truy cập vào mỗi yếu tố dom và kiểm tra xem nó là một lĩnh vực đầu vào và xác nhận nó?Xác thực đệ quy các phần tử nhập HTML

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

Câu hỏi này có thể phù hợp hơn cho [việc trao đổi mã xem xét lại] (http://codereview.stackexchange.com) vì bản chất câu hỏi của bạn là tìm kiếm cải tiến hơn là trợ giúp với một vấn đề. –

+0

Ồ, tôi thậm chí còn không biết đánh giá mã là một điều. Tôi có thể di chuyển bài đăng của mình ở đó hoặc ai đó có thể di chuyển nó cho tôi không? – dimlee

+0

Bạn có thể xóa bài đăng của mình ở đây và đăng lại ở đó (ưa thích) hoặc gắn cờ cho sự chú ý của người kiểm duyệt, yêu cầu di chuyển nó (có thể tránh điều đó vì nó hoạt động nhiều hơn cho người kiểm duyệt làm việc quá sức). - bây giờ bạn có một câu trả lời Tôi không nghĩ rằng bạn ** có thể ** xóa nó. –

Trả lời

4

Nếu bằng tốt hơn bạn có nghĩa là ít tiết, đây là tương đương về mặt chức năng

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 

Chú ý rằng không có nhu cầu về đệ quy ở đây vì

parent.find('*') 

sử dụng *(all-selector). Điều này sẽ nhận được tất cả trẻ em và trẻ em lồng nhau.

Cập nhật

Để cải thiện hiệu suất, bạn có thể cấu trúc ở trên để

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

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

này sẽ nhận được tất cả lồng input yếu tố, do đó bạn sẽ không phải thậm chí kiểm tra

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

Tôi thích câu trả lời này nhưng tôi hơi tò mò sẽ hiệu quả hơn. – dimlee

+0

@dimlee, xem câu trả lời cập nhật của tôi để đạt được hiệu suất – AmmarCSE

+0

Bạn có thể tránh kiểm tra 'type' bằng' parent.find ('input: text') ... ' –

3

Tôi sẽ sử dụng công cụ chọn hẹp hơn:

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

Điều này không bao gồm các yếu tố đầu vào là con của con cái "cha mẹ", mà mã OP sẽ xử lý ('if ($ (this) .is (" input "))'). Bạn có thể sửa nó bằng cách loại bỏ phương thức 'children()'. –

Các vấn đề liên quan