#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;
insideif-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