مشکل در استفاده از دو for در جاوا اسکریپت
وقتی می خوام دو متغیر رو بفرستم در قالب دو innerhtml هر دو توسط for دومی اعمال میشه
من چطور می تونم به ازای هر innethtml براش for مربوط به خودش رو بفرستم
یه مثال می زنم
console.log = function(msg) {document.body.innerHTML += '<p>' + msg + '</p>';};
var funcs = {};
for (var i = 0; i < 3; i++) {
funcs[i] = wrapper(i);
}
for (var j = 0; j < 3; j++) {
funcs[j]();
}
//creates a separate environment for the inner function
function wrapper(ilocal) {
return function() { //return the inner function
console.log("My value: " + ilocal);
};
}
چطور میشه کد رو به صورتی در آورد که هر for به طور جداگانه مقدار مربوط به خودش رو نشون بده
نقل قول: مشکل در استفاده از دو for در جاوا اسکریپت
از عزیزان کسی راهنمایی نداره ؟
نقل قول: مشکل در استفاده از دو for در جاوا اسکریپت
نقل قول:
نوشته شده توسط
fun_9990
از عزیزان کسی راهنمایی نداره ؟
چرا .... سوالت رو بد توضیح دادی قابل فهم نیست که چی داری میپرسی
استفاده از http://jsfiddle.net برای نوشتن و ارائه کد هم میتونه به درک سوال کمک بکنه
نقل قول: مشکل در استفاده از دو for در جاوا اسکریپت
نقل قول:
نوشته شده توسط
plague
چرا .... سوالت رو بد توضیح دادی قابل فهم نیست که چی داری میپرسی
استفاده از
http://jsfiddle.net برای نوشتن و ارائه کد هم میتونه به درک سوال کمک بکنه
حق با شماست
یک مثال دیگه می زنم که قابلیت پاسخ به قول شما داشته باشه
فرض کنید کد html ما این هست
<input type="button" value="Test" onclick="nemi()"/>
<br/>
<input type="text" id="red1" />
<br />
<input type="text" id="red2" />
و کد جاوااسکریپت ما این هست
function nemi()
{
var myida = document.querySelectorAll("[id^=red]");
var myidb = document.querySelectorAll("[id^=red]");
for (var j = 0; j < myida.length; j++)
{
myida[j].value = 1;
}
for (var n = 0; n < myidb.length; n++)
{
myidb[n].value = 2;
}}
الان اینجا خروجی for اول به دلیل آخرین حلقه ای که برنامه می خونه عملا حذف میشه و نمی شه خروجی اون رو مشاهده کرد
نقل قول: مشکل در استفاده از دو for در جاوا اسکریپت
مشکل کد شما ربطی به حلقه ها ندارن مشکل اینه که سلکتوراتون دقیقا یکی هستن
در نتیجه توی هر دو متغیر دارن به المنت های یکسانی اشاره میکنن
به طور خلاصه داری میگی که توی اون 2 تا فیلد 1 بریز بعد میگی توی اون 2 فیلد 2 بریز انتظار دارید چه اتفاقی بیفته ؟ توی اولی 1 و توی دومی 2 ریخته بشه ؟
https://jsfiddle.net/196fsvq1/
نقل قول: مشکل در استفاده از دو for در جاوا اسکریپت
نقل قول:
نوشته شده توسط
plague
مشکل کد شما ربطی به حلقه ها ندارن مشکل اینه که سلکتوراتون دقیقا یکی هستن
در نتیجه توی هر دو متغیر دارن به المنت های یکسانی اشاره میکنن
به طور خلاصه داری میگی که توی اون 2 تا فیلد 1 بریز بعد میگی توی اون 2 فیلد 2 بریز انتظار دارید چه اتفاقی بیفته ؟ توی اولی 1 و توی دومی 2 ریخته بشه ؟
https://jsfiddle.net/196fsvq1/
درسته اما اگر هر سلکتور زیر مجموعه از یک کلاس باشه چی ؟ اما اینجا هم همون نتیجه رخ میده
لطفا به این کد نگاه کنید
<input type="button" value="Test" onclick="nemi()"/>
<div class="d1">
<input type="text" id="red1" />
</div>
<div class="d2">
<input type="text" id="red2" />
</div>
<script>
function nemi()
{
var d1 = document.getElementsByClassName('d1')[0].childNodes;
var d2 = document.getElementsByClassName('d2')[0].childNodes;
var myida = document.querySelectorAll("[id^=red]");
var myidb = document.querySelectorAll("[id^=red]");
for (var i=0; i < d1.length; i++){
for (var j = 0; j < myida.length; j++)
{
myida[j].value = 1;
}
}
for (var m=0; m < d2.length; m++){
for (var n = 0; n < myidb.length; n++)
{
myidb[n].value = 2;
}
}
</script>
برای حالتی که سلکتور پسر زیر مجموعه کلاس پدر باشه آیا میشه برای دو سلکتور با تعریف همسان کاری کرد که for جواب یکسان نده ؟
آیا با تغییر در for امکان پذیر هست ؟
اگر هست جوابش به چه صورت می تونه باشه . و اگر نه آیا باید دسترسی از کلاس پدر داده بشه ؟ ( به چه صورت )
ممنون
نقل قول: مشکل در استفاده از دو for در جاوا اسکریپت
سلکتور شما تو این مثال هیچ فرقی نکرده
به هیچ وجه زیر مجموعه کلاس نرفته اصلا
تنها کاری که کردی شما یه حلقه اضافه کردی به هر حلقه از 2 تای قبلی
به طور خلاصه داری میگی برای 1 بار توی 2 فیلد بریز 1 - برای 1 بار توی 2 فیلد بریز 2
مشکل شما اون سلکتور red هستش که نوشتی اگه میخای نتیجه متفاوت بگیری باید اون سلکتور رو عوض کنی مثل این
https://jsfiddle.net/196fsvq1/1/
نقل قول: مشکل در استفاده از دو for در جاوا اسکریپت
نقل قول:
نوشته شده توسط
plague
سلکتور شما تو این مثال هیچ فرقی نکرده
به هیچ وجه زیر مجموعه کلاس نرفته اصلا
تنها کاری که کردی شما یه حلقه اضافه کردی به هر حلقه از 2 تای قبلی
به طور خلاصه داری میگی برای 1 بار توی 2 فیلد بریز 1 - برای 1 بار توی 2 فیلد بریز 2
مشکل شما اون سلکتور red هستش که نوشتی اگه میخای نتیجه متفاوت بگیری باید اون سلکتور رو عوض کنی مثل این
https://jsfiddle.net/196fsvq1/1/
مرسی شما دسترسی مستقیم دادین ( اما من اینقد هم کد ساده رو تصور نمی کنم )
اما در این صورت یعنی اگر هر دو Red باشن آیا باید زیر مجموعه کلاس باشن
کاری که در مثال دوم کردم مگه زیر مجموعه کلاس نشدن ؟ اشکال کارم کجاست ؟ ( مگه نه اینه که وقتی for برای سلکتور داخل for کلاس آوردم و آخر سر هم for والد رو بستم )
شما فرض کنید اون دو تا red همسان باشن
حالا اینی که گفتم یک حالت و حالت دوم هم اینکه اگه ما اصلا به id ها کاری نداشته باشیم و صرفا بخوایم با class خروجی بگیریم چی
اون موقع چطور باید بنویسیم ؟
نقل قول: مشکل در استفاده از دو for در جاوا اسکریپت
حلقه for مالکیت یا زیر مجموعه بودن المنت ها رو تایین نمیکنه فقط یه حلقست
شما وقتی میگی
for (var i=0; i < d1.length; i++)
از نظر برنامه داری میگی
for (var i=0; i < 1; i++)
هیچ ربطی به اون المنت پدر نداره چون d1.length تبدیل میشه به یک عدد
شما اگه میخای ببری زیمجموع دیو ها بزاری باید سلکتور red رو تغییر بدی من همیشه با jquery کار میکنم و مطمئن نیستم با جاوا اسکریپت خالی سلکتورش چجوری میشه ممکنه اررور سینتکس داشته باشم ولی بیه همچین چیزی باید بشه
var myid1 = document.getElementsByClassName("d1")[0].getElementById("red1");
با جیکوئری هم که این میشه
var myid1 = $('.b1').find('#red1');
اگرم بخای صرفا با کلاس بگیریشون اینجوری میشه
var myid1 = $('.b1').find('div');
ولی خب این یکم باید حواست باشه چون همه div های توی کلاس رو میگیره
نقل قول: مشکل در استفاده از دو for در جاوا اسکریپت
نقل قول:
نوشته شده توسط
plague
حلقه for مالکیت یا زیر مجموعه بودن المنت ها رو تایین نمیکنه فقط یه حلقست ...
خیلی ممنون از توضیحاتتون من پون قبلا اینو تست کرده بودم نتیجه نداد اومدم حلقه تو در تو کردم که بنا به چیزی که شما میگید در این مورد استنباطم غلط بودهحالا اگر querySelectorAll باشه چی ؟ ( فرقی نمی کنه جاوا اسکریپت یا جی کیوئری اگر هر کدوم رو بگید معادلشو پیدا می کنم ) می تونه به این صورت باشه ؟var myid1 = document.getElementsByClassName("d1")[0].querySelectorAll("[id^=red]");
به نظرم اصلا نمیشه . یا شایدم اشتباه می کنم . ( به هر حال من هدفم اینه دسترسی داشته باشم در صورتی که هر دو id یکسان هست و اگر تغییرش دادم مجبور نشم هر بار id رو برای JS عوض کنم و از querySelectorAll استفاده کردم )
نقل قول: مشکل در استفاده از دو for در جاوا اسکریپت
بله اینم کار میکنه لینک رو نگاه کنید
https://jsfiddle.net/196fsvq1/2/