.each()ã®è©±
jQueryã®.each()ã使ãã¨ï¼JavaScriptã®ãªãã¸ã§ã¯ããé
åã対象ã«ããç¹°ãè¿ããç°¡åã«è¨è¿°ã§ããï¼*1
var list = [0,1,1,2,3,5,8,13]; $.each(list, function(index, elem){ console.log(elem * 2); }); // 0 VM2035:4 // 2 VM2035:4 // 2 VM2035:4 // 4 VM2035:4 // 6 VM2035:4 // 10 VM2035:4 // 16 VM2035:4 // 26 VM2035:4
ã§ï¼ãã®eachã«ã¯ããä¸ã¤æ¸ãæ¹ãããï¼
var list = [0,1,1,2,3,5,8,13]; $.each(list, function(){ // ãã£ãã¯å¼æ°ã«index, elemãæå®ãã¦ãã console.log(this * 2); // 弿°ã§ã¯ãªãï¼thisã§ã¢ã¯ã»ã¹ãã¦ãã }); // 0 VM2032:4 // 2 VM2032:4 // 2 VM2032:4 // 4 VM2032:4 // 6 VM2032:4 // 10 VM2032:4 // 16 VM2032:4 // 26 VM2032:4
éãã¯ï¼
ããã¥ã¡ã³ãã«ã¯ããããï¼
The value can also be accessed through the this keyword, but Javascript will always wrap the this value as an Object even if it is a simple string or number value.
http://api.jquery.com/jQuery.each/
å¤ã«ã¯thisãã¼ã¯ã¼ãã使ç¨ãã¦ãã¢ã¯ã»ã¹ã§ãããï¼Javascriptã¯ãããåãªãæååãæ°å¤ã§ãã£ã¦ã常ã«Objectã¨ãã¦ãã®å¤ãã©ããããï¼
jQueryã®ã³ã¼ãã§è¨ãã¨https://github.com/jquery/jquery/blob/master/src/core.js#L279ã®ãããï¼
ããã§ç¹ã«å¤§ããªå¤åãèµ·ããã®ãè¦ç´ ã«nullãundefinedãå«ã¾ãã¦ããå ´åã§ï¼ãã©ã¦ã¶ã§å®è¡ãããå ´åthisãwindowã¨ãªãï¼*2
åé¡ã«ãªãã·ããªãª
ãã妿 ¡ã§ï¼é¨æ´»åã¨ãã®é¨ã«æå±ãã¦ããå¦çã®ååã対話çã«è¡¨ç¤ºããã¦ã§ããã¼ã¸ãå®è£ ããå ´é¢ãèããï¼

éã«ã¯ããããæãï¼
表示ãã¹ã ã¼ãºã«åãæ¿ããããï¼ãã®ãã¼ã¸ã§ã¯ã¢ã¯ã»ã¹æã«å ¨å¦çã®ãã¼ã¿ã¨ï¼å ¨é¨æ´»åã®ãã¼ã¿ããµã¼ãããåå¾ãã¦ã*3ï¼ããããã®ä¾ã以ä¸ã«ç¤ºãï¼
var clubMembers = { 'cl001': ['st13010', 'st13011', 'st14012'], 'cl002': ['st13100', 'st14100', 'st14005'], 'cl003': ['st12023', 'st13045', 'st14009'] }; var students = { 'st13010': {'name': 'A', 'grade': 2, 'class': 'A', 'sex': 'F'}, ... 'st14009': {'name': 'I', 'grade': 1, 'class': 'A', 'sex': 'F'} };
åç°¿ã®è¡¨ç¤ºã«ã¤ãã¦ï¼ããã§ã¯å ã«è©³ç´°ãªå¦çãªã¹ããã¤ããï¼ãããå©ç¨ããæ¹éã§å®è£ ãã¦ã¿ãï¼
var clubMembersDetail = function(clubName){ var detail = []; $.each(clubMembers[clubName], function(){ detail.push(students[this]); }); return detail; }; // ... $('#clubSelector').on('change', function () { var clubName = this.value; $.each(clubMembersDetail(clubName), function(){ $('ul#memberlist').append('<li>' + this + '</li>'); }); });
ãã¦ï¼ããã§cl001ã®st14012ãè»¢æ ¡ãã¦ããï¼ãã§ã«å¦çã®åç°¿ã«ã¯ç¡ãã¨ã©ããªããï¼clubMembersDetailã®3è¡ç®students[this]ã§undefinedã¨ãªãããï¼ãªã¹ãã¯[<student obj>, <student obj>, undefined]ã¨ãªãï¼è¡¨ç¤ºã¯ä»¥ä¸ã®ããã«ãªãï¼

ããã§ï¼æå¾ã®ç©ºæåãåºåãã¦ããæã®thisã¯windowã§ããï¼ã¤ã¾ãwindow.nameã""ã§ãããã¨ãåºåãã¦ããï¼window.nameã¯å¤é¨ããæ¸ãæããå¯è½ãªããï¼ã·ã¹ãã ã®åºåãä¿¡ãã¦appendãã¦ããä»åã®ã±ã¼ã¹ã§ã¯XSSã«ã¤ãªããï¼

ã¨ãããã¨ã§
æå¾ã¯æããã«æªæã®ããä¾ã«ãªã£ã¦ãã¾ã£ããã©*5ï¼è¦ç´ ã«å¤ãå ¥ãããããªå ´åã§ã¯æ°ãã«windowã®ããããã£ãå®ç¾©ãã¦ãã¾ã£ããï¼ææªã®å ´åãã§ã«å®ç¾©ããã¦ããwindowã®ããããã£ãç ´å£ãããã¨ã«ãªããï¼åç §ã®ä¾ã§ãnullãundefinedãæå¾ ãã¦callbackã®ä¸ã§this === nullãthis === undefinedã®ãããªæ¡ä»¶ãæ¸ãã¦ãã¾ãã¨ãã¾ãåããªããã¨ã«ãªãï¼
以ä¸ã«ãªãã¾ãï¼ãæ°ãã¤ããã ããï¼
追è¨
gistã«ç½®ãã¾ããã®ã§èå³ããã人ã¯éãã§ã¿ã¦ãã ããï¼
*1:$(selector).each()ã§ã¯ãªã$.each()ã®æ¹ã®ã話ï¼
*2:ããçµå±Function.prototype.call()ã¨Function.prototype.apply()ã®ç¬¬ä¸å¼æ°ã«null/undefinedãæ¸¡ããã¨ãã®ä»æ§ã£ã¦ãã¨ãªãã§ããã? ã¡ãã£ã¨ããã¾ã§èª¿ã¹ã¦ãªãã§ãï¼
*3:ããããã¯ç¡ãã ãã£ã¦æãããç¥ããªããã©ã¨ããããããã¯ç½®ãã¦ããã¦
*4:ãã©ã¼ãããã¯stã¯studentï¼æ¬¡ã®äºæ¡ãå ¥å¦å¹´åº¦ï¼æ«å°¾ã®3æ¡ããã®å¹´åº¦ã§ã®ååé ã¨ãããã¨ã«ãã¦ã¿ããï¼
*5:appendã使ããªããã°ã¨ããããXSSã¯é¿ããããã