Как сделать так, чтобы возвращаемое событие сначала соответствовало только с помощью jQuery?

#jquery

#jquery

Вопрос:

У меня есть событие цикла с условием соответствия. Проблема в том, что сопоставление может происходить более одного раза. Мне нужен только первый совпадающий результат. Это какой-то сценарий:

     <div class='container_a'>
       <div class='user user_name' id="user_shipment_name">John</div>
       <div class='user user_type' id="user_shipment_type">Admin</div>
    </div>

   <div class='container_b'>
       <div class='user user_name' id="user_payroll_name">Ray</div>
       <div class='user user_type' id="user_payroll_type">Staff</div>
   </div>
 

jQuery:

 $(".user").each(function(i){
     var user_match = $(this).first().prop("id").split("_");
                    
     if("user_name" == user_match[0] amp;amp; "user_type" == user_match[2]){
          // I'd like to return user_name John and user_type Admin here
     }              
});
 

Я использую .first() , но все еще не получаю желаемого результата.

Используется текущий точный сценарий:

 $(".isBilling").each(function(i){
                
                var input_type      = $(this)[0].tagName;
                var company_match   = $(this).prop("id").split("_");
                
                if(input_type == "SELECT"){
                    var val_billing_addr = $(this).find("option:selected").text();
                }
                else{
                    var val_billing_addr = $(this).val();
                }
                
                $(".billing").each(function(i){
                    var billing_match = $(this).first().prop("id").split("_");
                    
                    var default_addr = company_match[0]   "_"   company_match[2]   "_"   company_match[3];
                    var billing_addr = billing_match[0]   "_"   billing_match[2]   "_"   billing_match[3];
                    
                    if(default_addr == billing_addr){                           
                        $(this).val(val_billing_addr);              
                    }               
                });

                
            });
 

Комментарии:

1. Привет, попробуйте вставить return false; inside if-statement , чтобы цикл завершался при обнаружении совпадения.

2. Я только что добавил его, но все равно не повезло

3. Я не уверен, что не так, но вы можете видеть, что здесь это работает.

Ответ №1:

Вместо .each() этого вы можете использовать цикл:

 function foo() {
    for (let user of $(".user")) {
        var user_match = $(user).first().prop("id").split("_");
                    
        if("user_name" == user_match[0] amp;amp; user_type[2] == user_match[2]){
             return {
                 user_name: user_match[0],
                 user_type: user_match[2]
             };
             // I'd like to return user_name John and user_type Admin here
        }              
    }
}
 

Редактировать

Основываясь на комментариях, кажется, что нам нужно выйти из .each() после выполнения условия. Мы можем добиться этого, вернув false:

             $(".billing").each(function(i){
                var billing_match = $(this).first().prop("id").split("_");
                
                var default_addr = company_match[0]   "_"   company_match[2]   "_"   company_match[3];
                var billing_addr = billing_match[0]   "_"   billing_match[2]   "_"   billing_match[3];
                
                if(default_addr == billing_addr){                           
                    $(this).val(val_billing_addr);
                    return false;              
                }               
            });
 

Комментарии:

1. У меня все еще есть последний совпадающий элемент

2. @Vahn можете ли вы показать точный код, который у вас есть?

3. конечно. Я добавлю это в m вопрос

4. @Vahn спасибо. Можете ли вы также показать, как вы пытались применить идею, представленную в этом ответе? Честно говоря, это должно сработать, потому что оператор return в функции foo завершает цикл, когда найдено первое совпадение, и возвращает объект, представляющий совпадение.

5. ну, вы можете проверить эту скрипку jsfiddle.net/9mgey210/4