2016-01-28 1 views
0

Вот мое вложенное использование .each:Как правильно использовать «this» внутри вложенных .each() (s)? (JQuery)

itemData["segmentos"] = {}; 
$("[id^='item-segmentos-']").each(function() { 
    $("[id^='item-tipo-']").each(function() { 
     itemData["segmentos"][$(outerthis).val()] = $(innerthis).val(); 
    }); 
}); 

Как я могу использовать «outerthis» в пределах внутренней .each?

+0

Там в 'each' конкретного ответа, который не охватывается в указанном дубликате (и я думаю, это лучшее решение для этого конкретного вопроса, в соответствии с моим ответом), поэтому мой голос возобновлять не -an-exact-duplicate – CupawnTae

ответ

2

Чтобы использовать «внешние» this во внутренних each() петель, вы просто должны кэшировать «внешнее» this в переменной, а затем обратитесь к этой переменной в месте использования this в пределах внутренних each() петель :

itemData["segmentos"] = {}; 
$("[id^='item-segmentos-']").each(function() { 
    var outerThis = $(this); 
    $("[id^='item-tipo-']").each(function() { 
     var innerThis = $(this); 
     itemData["segmentos"][outerThis.val()] = innerThis.val(); 
    }); 
}); 
3

Вы можете назначить его переменной во внешней функции. Это сформирует закрытие и внутренняя функция будет иметь доступ к внешнему переменному:

itemData["segmentos"] = {}; 
$("[id^='item-segmentos-']").each(function() { 
    var outerthis = this; 
    $("[id^='item-tipo-']").each(function() { 
     itemData["segmentos"][$(outerthis).val()] = $(this).val(); 
    }); 
}); 

Но обратите внимание, что Jquery передает индекс и элемент в качестве параметров для обратного вызова, которые могут сделать для более четкого кода, например

itemData["segmentos"] = {}; 
$("[id^='item-segmentos-']").each(function(oIndex, outerElement) { 
    $("[id^='item-tipo-']").each(function(iIndex, innerElement) { 
     itemData["segmentos"][$(outerElement).val()] = $(innerElement).val(); 
    }); 
}); 
+0

Просто указывая th Очевидно. В первом примере 'innerthis' не определен. –

+0

@PatrickRoberts спасибо, исправлено – CupawnTae