کار با متد getElementById و innerHTML در جاوا اسکریپت (JavaScript)

معمولا در زبان های برنامه نویسی مختلف، برخی خاصیت ها و متدها بیشتر از سایر موارد به کار می روند که می توان اصطلاح متدهای پرکاربرد را برای آنها به کار برد، در کدنویسی با جاوا اسکریپت، دو متد پرکاربرد getElementById و innerHTML جزء برجسته ترین این موارد هستند، البته عبارت متد (Method) بیشتر در برنامه نویسی شی گرا (OOP یا Object Oriented Programming) کاربرد دارد و مواردی مانند innerHTML را خاصیت (Property) می نامند، با این وجود و به جهت اینکه این موضوع (OOP) در جاوا اسکریپت چندان مصداق ندارد، به اختصار و در این آموزش به هر دو، متد خواهیم گفت، به هر صورت برای آشنایی بیشتر و جهت تکمیل دانستنی هایی که تا این لحظه آموخته ایم، با ادامه مطلب همراه ما باشید.
متد getElementById
از getElementById در جاوا اسکریپت برای تعیین یک مرجع (reference) به یک عنصر (element) با توجه به ID آن استفاده می شود، به زبان ساده یعنی انتخاب یک عنصر HTML (به فرض تگ div) با توجه به ID آن، به طور مثال اگر بخواهیم مقادیر value یک input را با توجه به ID آن استخراج کنیم، خواهیم نوشت:
<input id="test" type="text" value="1">
<script type="text/javascript">
var input = document.getElementById('test').value;
alert(input);
</script>
نکته 1: همان طور که در مثال بالا مشخص است، متد getElementById خود وابسته به شی (object) دیگری به نام document است، لذا الزاما باید به همراه آن استفاده شود.نکته 2: متد getElementById نسبت به بزرگ یا کوچک بودن مقادیر ID حساس است، به طور مثال Id با id در این متد دو مقدار متفاوت هستند.
نکته 3: در هنگام استفاده از متد getElementById دقت کنید که تگ مورد نظر پیش از فراخوانی، در دسترس قرار گرفته باشد، به عبارت دیگر ابتدا باید تگ مورد نظر توسط مرورگر (و بر اساس ساختار DOM یا نمودار درختی تگ ها از بالاترین قسمت صفحه به پائین) پردازش شود و سپس بتوان عملیاتی روی آن انجام داد، به فرض حالت زیر اشتباه است و خطای TypeError: document.getElementById(...) is null را دریافت خواهید کرد.
<script type="text/javascript">
var input = document.getElementById('test').value;
alert(input);
</script>
<input id="test" type="text" value="1">
علت خطا در مثال بالا این است که پیش از پردازش تگ input مورد نظر، آن را در دستورات جاوا اسکریپت فراخوانی کرده ایم، در صورت نیاز می توانید این مشکل را با استفاده از window.onload (این رویداد زمانی اجرا می شود که صفحه به طور کامل بارگذاری شده باشد) برطرف کنید:<script type="text/javascript">
window.onload = function(){
var input = document.getElementById('test').value;
alert(input);
}
</script>
<input id="test" type="text" value="1">
متد innerHTML
از innerHTML در جاوا اسکریپت برای دریافت یک مقدار از درون تگ های HTML یا اختصاص دادن یک مقدار به تگ ها و تغییر محتوای آنها استفاده می شود، به مثال زیر توجه کنید.
<script type="text/javascript">
function SetValue(id){
var element = document.getElementById(id);
//دریافت مقادیر از عنصر مورد نظر
var value = element.innerHTML;
alert(value);
}
</script>
<input type="button" onclick="SetValue('result');" value="کلیک کنید">
<div id="result">این یک تست است</div>
همان طور که اشاره شد، کاربرد innerHTML محدود به دریافت یک مقدار نیست و می توان برای اختصاص مقادیر به عناصر HTML از آن استفاده کرد، به مثال زیر توجه کنید.<script type="text/javascript">
function SetValue(id, value){
var element = document.getElementById(id);
//اختصاص مقدار به عنصر مورد نظر
element.innerHTML = value;
}
</script>
<input type="button" onclick="SetValue('result', 'این یک تست است');" value="کلیک کنید">
<div id="result"></div>
نکته 1: همان طور که ملاحظه می کنید innerHTML وابسته به متد و آبجکت پیش از خود (document و getElementById) است.نکته 2: استفاده از متد innerHTML برای تغییر محتوای یک عنصر والد (parent) باعث حذف تگ های فرزند (child) آن نیز می شود، به فرض اگر درون تگ div از چند تگ تو در تو استفاده شده باشد، با به کار بردن innerHTML برای تگ والد، محتوای آن هر چه باشد (شامل تگ های div تو در تو) حذف و با مقادیر جدید جایگزین می شود.
نکته 3: برای دریافت مقادیر از تگ input یا تغییر محتوای آن، باید از متد value به جای innerHTML استفاده شود.
مثال و پیش نمایش آنلاین
برای آشنایی بیشتر با کاربردهای getElementById و innerHTML در جاوا اسکریپت، چند مثال کاربردی را همراه با پیش نمایش آنلاین در زیر بررسی می کنیم.
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>وبگو | کاربرد متد getElementById و innerHTML</title>
<!-- https://webgoo.ir -->
<style type="text/css">
body{
font-family:Tahoma, Geneva, sans-serif;
font-size:12px;
direction:rtl;
line-height:20px;
}
#text-box{
padding:6px;
background:#CCC;
}
#test-block{
padding:6px;
background:#CCF;
cursor:pointer;
}
</style>
</head>
<body>
<noscript>
جاوا اسکریپت در مرورگر شما غیر فعال است یا پشتیبانی نمی شود!<br>
</noscript>
<input id="test" type="text" value="یک مقدار وارد کنید">
<input type="button" value="کلیک کنید" onclick="AlertValue('test');">
<script type="text/javascript">
function AlertValue(id){
var value = document.getElementById(id).value;
alert(value);
}
</script>
<br><br>
آرگومان متد getElementById همان id عنصر HTML مورد نظر است.
<hr><br>
<div id="text-box">پس از کلیک بر روی دکمه تغییر رنگ و اجرای تابع ChangeColor، با استفاده از متد getElementById و style رنگ پس زمینه این بلاک تغییر می کند!</div><br>
<input type="button" value="تغییر رنگ" onclick="ChangeColor('text-box');">
<input type="button" value="رنگ پیش فرض" onclick="DefaultColor('text-box');">
<script type="text/javascript">
function ChangeColor(id){
var block = document.getElementById(id);
block.style.backgroundColor = "#FC0";
}
function DefaultColor(id){
var block = document.getElementById(id);
block.style.backgroundColor = "#CCC";
}
</script>
<hr><br>
<input id="text-input" type="text" onkeyup="InnerChange(this.id);"><br>
<div id="inner-text"></div>
<script type="text/javascript">
function InnerChange(id){
var element = document.getElementById(id);
var value = element.value;
document.getElementById('inner-text').innerHTML = value;
}
</script>
<br><br>
پس از تایپ عبارت در فیلد بالا، رویداد onkeyup اجرا شده و تابع InnerChange فراخوانی می شود، در این مثال از متد innerHTML استفاده کرده ایم.<br>
نکته: با استفاده از عبارت کلیدی this.id می توانید به صورت خودکار id بلاک یا تگ input مورد نظر را به کدهای خود بدهید.
<hr><br>
<div id="test-block" onclick="GetText(this.id);">این یک متن آزمایشی است!</div>
<script type="text/javascript">
function GetText(id){
var element = document.getElementById(id);
var text = element.innerHTML;
alert(text);
}
</script>
<br><br>
برای دریافت متن داخل بلاک div با استفاده از متد innerHTML، در داخل کادر رنگی بالا کلیک کنید.
</body>
</html>
پیش نمایشدسته بندی: آموزش مقدماتی » JavaScript
برچسب ها: JavaScript
« بعدی

کار با تاریخ و زمان در جاوا اسکریپت (JavaScript)
آرایه (Array) در جاوا اسکریپت (JavaScript)
دستور switch و case در جاوا اسکریپت (JavaScript)
توابع (Functions) در جاوا اسکریپت (JavaScript)
کار با پنجره Pop-up در جاوا اسکریپت (JavaScript)
دیدگاه


غریب
۱۴:۰۷ ۱۴۰۰/۰۱/۱۰
سلام مجدد
این کدی که دادید خوب هست ولی من بد و ناقص توضیح دادم توجه کنید کد این هست تقریبا
این کدی که دادید خوب هست ولی من بد و ناقص توضیح دادم توجه کنید کد این هست تقریبا
<style>
#demo2 {
width: 500px;
height: 100px;
border: 1px solid #CCC;
}
</style>
<a class="demo1" title="تست" href="http://example.com/path/to/dir" target="_blank">تست</a>
<div id="demo2">اینجا کلیک کنید</div>
<script>
//اختصاص رویداد به بلاک
document.getElementById("demo2").onclick = function(){test()};
//تعریف تابع
function test(){
//دریافت آدرس لینک
var url = document.getElementsByClassName('demo1')[0].getAttribute('href');
//حذف اطلاعات موجود در بلاک جهت جلوگیری از نتایج تکراری در کلیک های بعدی
document.getElementById("demo2").innerHTML = '';
//تعریف تگ جدید برای لینک
var para = document.createElement("a");
para.classList.add("mystyle");
para.setAttribute("style", "position:absolute");
para.setAttribute("href", url + "/rss");
para.innerHTML = '<br>' + url + "/rss";
document.getElementById("demo2").appendChild(para);
}
</script>
ممنون میشم باز راهنماییم کنیدکدی که درج کردید ویرایش و اصلاح شد، چند نکته:
- برای اختصاص رویداد باید از onclick استفاده کنید، click برای جی کئوری کاربرد دارد و باید سورس کتابخانه جی کئوری در صفحه وارد شده باشد یا اینکه از addEventListener استفاده کنید.
- با متد createElement یک بلاک div ساخته اید اما از صفت href (که برای در نظر گرفتن قسمت لینک است) هم در ادامه برای این تگ استفاده کرده اید، صفت href برای تگ a کاربرد دارد نه div، لذا تگ a جایگزین بلاک div شد.
- برای مشاهده زنده تغییرات کد و داشتن درک بهتری از اتفاقاتی که پس از کلیک می افتد می توانید دکمه F12 را فشرده و از قسمت Inspector سورس کدها را بررسی کنید.
- برای اختصاص رویداد باید از onclick استفاده کنید، click برای جی کئوری کاربرد دارد و باید سورس کتابخانه جی کئوری در صفحه وارد شده باشد یا اینکه از addEventListener استفاده کنید.
- با متد createElement یک بلاک div ساخته اید اما از صفت href (که برای در نظر گرفتن قسمت لینک است) هم در ادامه برای این تگ استفاده کرده اید، صفت href برای تگ a کاربرد دارد نه div، لذا تگ a جایگزین بلاک div شد.
- برای مشاهده زنده تغییرات کد و داشتن درک بهتری از اتفاقاتی که پس از کلیک می افتد می توانید دکمه F12 را فشرده و از قسمت Inspector سورس کدها را بررسی کنید.
غریب
۰۵:۴۷ ۱۴۰۰/۰۱/۱۰
سلام خسته نباشید
من کدی دارم که میخوام داخل یه بخشیش نتیجه یه رویداد رو فراخوانی کنم و راهش و نمیدونم اگر میشه کمک کنید
در حالت عادی این هست کد
من کدی دارم که میخوام داخل یه بخشیش نتیجه یه رویداد رو فراخوانی کنم و راهش و نمیدونم اگر میشه کمک کنید
در حالت عادی این هست کد
para.setAttribute("href", "http;//www.site.ir/courses/post8/rss");
چطور میشه با این کد document.getElementsByClassName('someclass')[0].getAttribute('href')
ادرس کامل لینکی که داخل تگ someclass هست رو بگیرم و بعد بیام داخل کد پائین فراخوانی کنمpara.setAttribute("href", "( اینجا لینک رو اضافه کنم)"/rss");
و همینطور که مشخص کردم لازم دارم بعد از اضافه کردن یه پسوند هم مثل ار اس اس اضافه کنم البته ار اس اس فقط یک مثال هست یعنی کد من با در نظر گرفتن ادرس لینکی که داخل تگ someclass وجود داره نتیجه رو بده ممنون میشم اگر راهی داره راهنماییم کنید و اگر امکانش هست کدش رو بزاریداگر درست متوجه منظورتان شده باشیم کافی است با علامت جمع (+) متغیرها را اضافه کنیم، مثال:
نکته: با توجه به استفاده از متد getElementsByClassName و عدد 0 به عنوان ایندکس، در صورتی که چند تگ با کلاس someclass در صفحه وجود داشته باشد صرفا تگ اول انتخاب می شود.
<a class="someclass" href="http://example.com/path/to/dir">Old Link</a>
<a id="para">New Link</a>
<script>
function setAttr(){
let url = document.getElementsByClassName('someclass')[0].getAttribute('href');
let para = document.getElementById('para');
para.setAttribute("href", url + "/rss");
}
setAttr();
</script>
در اینجا فرض کرده ایم که para یک لینک در صفحه با تگ a است که ID آن عبارت para است و با متد document.getElementById به این تگ دسترسی پیدا کرده ایم.نکته: با توجه به استفاده از متد getElementsByClassName و عدد 0 به عنوان ایندکس، در صورتی که چند تگ با کلاس someclass در صفحه وجود داشته باشد صرفا تگ اول انتخاب می شود.
میثم صدیق
۰۹:۴۳ ۱۳۹۹/۰۶/۲۹
سلام برای اضافه کردن یک المان با (append) من یک کلید گذاشتم اضافه میشه ولی با هر بار کلیک کردن اضافه میشود اگر بخواییم یک بار اضافه شود و تکرار نشود چیکار کنیم
<script>
let control = 0;
$("#add_product_attribute3").click(function() {
let attributesection3 = $("#attribute_section3");
let id = attributesection3.children().length;
if(control === 0){
attributesection3.append(
createNewAttr3({
id
})
);
control = 1;
}
//alert(control);
});
</script>
برای اجتناب از تکرار می توانید با if یک شرط تعیین کنید که اگر برقرار نبود قسمت مربوط به اضافه کردن عنصر اجرا نشود (کد بالا با افزودن متغیر فرضی control جهت نمونه اصلاح شد).
لیلا
۱۴:۵۲ ۱۳۹۹/۰۲/۲۴
سلام ، ببخشید من میخوام یک مدرک رو در سایت آپلود کنم ولی ارور زیر رو میده . میشه راهنماییم کنید. ممنون
document.getElementById(...) is null
این خطا زمانی رخ می دهد که دسترسی به یک عنصر HTML برای کدهای جاوا اسکریپت مقدور نباشد، به فرض ID اشتباه باشد یا فراخوانی عنصر قبل از بارگذاری در HTML DOM اتفاق افتد (به زبان ساده کد جاوا اسکریپت قبل از تگ HTML مورد نظر در کدنویسی صفحه درج شود)، برای رفع خطا کدها باید به صورت آزمایش و خطا بررسی شوند.
زهرا جعفری
۱۰:۰۱ ۱۳۹۹/۰۲/۲۴
با سلام
بنده میخواهم در جاوااسکریپت یک textbox داشته باشم که در آن یک دکمه چشمک زن بذارم وسط متن و وقتی روی دکمه کلیک کنم مثلا یک پیام نشان داده شود چطور می تونیم و با چه تابعی این کار رو انجام بدم؟
ممنون میشم راهنمایی ام کنید
بنده میخواهم در جاوااسکریپت یک textbox داشته باشم که در آن یک دکمه چشمک زن بذارم وسط متن و وقتی روی دکمه کلیک کنم مثلا یک پیام نشان داده شود چطور می تونیم و با چه تابعی این کار رو انجام بدم؟
ممنون میشم راهنمایی ام کنید
برای ایجاد دکمه چشمک زن داخل باکس متنی باید از بلاک div به صورت contenteditable استفاده کنید، مثال:
<style>
#editor {
width: 500px;
height: 200px;
direction: rtl;
border: 1px solid #E5E5E5;
}
.button {
border: 1px solid #E5E5E5;
}
blink, .blink {
animation: blink 1s step-end infinite;
-webkit-animation: blink 1s step-end infinite;
-moz-animation: blink 1s step-end infinite;
-o-animation: blink 1s step-end infinite;
}
@-webkit-keyframes blink {
80% {
opacity: 0;
}
}
@-moz-keyframes blink {
80% {
opacity: 0;
}
}
@-o-keyframes blink {
80% {
opacity: 0;
}
}
@keyframes blink {
80% {
opacity: 0;
}
}
</style>
<script>
function alertThis(text){
alert(text);
}
</script>
<div id="editor" contenteditable="true">نمونه متن... <button class="button" onclick="alertThis('سلام به برنامه خوش آمديد!');"><span class="blink">کليک</span></button></div>
mahdi
۱۱:۳۳ ۱۳۹۸/۱۲/۲۷
سلام استاد عزیز ، وقتی ما title صفحه رو با جاوا اسکریپت تغییر میدیم یا مثلا یه تگ استرانگ باز و بسته میکنیم و داخلش چیزی قرار نمیدیم و با جاوااسکریپت داخلش رو پر میکنیم و مثلا یه کلمه کلیدی درش قرار میدیم .... در این صورت وقتی سورس صفحه رو میبینیم نه عنوان اون چیزی هست که تب مرورگر نشون میده و نه اون کلمه ای که با جاوا اسکریپت داخل تگ استرانگ گذاشتیم دیده میشه ... میخواستم بدونم آیا اینها در سئو هم تاثیر دارند یا نه موتور جستجو فقط اون چیزیو که داخل سورس میبینه مد نظر قرار میده و به عناصر یا متن هایی که با جاوااسکریپت اضافه شده اهمیتی نمیده یا اصلا نمیبینشون ؟ مرسی استاد عزیز و گرامی
طبق آخرین بررسی ها و شواهد موجود موتور جستجوی گوگل می تواند متن هایی که با جاوا اسکریپت در صفحه اضافه شده اند را ایندکس کند:
https://searchengineland.com/tested-googlebot-crawls-javascript-heres-learned-220157
منتها باید به این نکته توجه کنیم که احتمالا این قابلیت صرفا برای رویدادهایی مانند onload است که به محض بارگذاری صفحه به صورت خودکار اجرا می شوند، به عبارتی به نظر بعید است که ربات گوگل در هنگام بررسی صفحه به فرض بر روی دکمه ها کلیک و سپس صفحه را ایندکس کند، لذا روش بهینه برای سئو همچنان وجود متن مستقیم در HTML DOM یا همان سورس اصلی صفحه است، در صورت نیاز با ترفندهایی می توانیم هم بحث سئو را داشته باشیم و هم امکان و جلوه جاوا اسکریپتی را در نظر بگیریم، به طور مثال بلاک والد دربرگیرنده متن را با CSS مخفی سازی و با جاوا اسکریپت آشکار کنیم.mahdi
۱۱:۳۶ ۱۳۹۸/۱۲/۱۹
سلام استاد عزیز و گرامی امیدوارم سالمو سلامت باشی ، یه سوالی داشتم ، برای انتخاب یک المنت بوسیله نام تگ از این کد استفاده می کنیم
..........
خودم به این نتیجه رسیدم که اسکریپتی که ما مینویسیم فقط برای کدهای داخل فایل اصلی اعمال میشه یعنی مثلا index.php که تغییری نمیکنه و کلا بصورت استاتیکه و به مطالبی که بعدا داخل صفحه میشه ارتباطی پیدا نمیکنه ولی باز گفتم از شما بپرسم که مطمئن شم .... خیلی ممنون میشم راهنماییم کنی موفق باشی
document.getElementsByTagName("P")[5];
میخواستم بدونم وقتی یه سایت داینامیک هست و با ارسال مطلب به تگ های مثلا پاراگراف اضافه میشه ، اون اندیسی که ما مثلا برای انتخاب پاراگراف پنج در نظر گرفتیم ، جابجا نمیشه و برنامه ای که مینویسیم به هم نمیخوره؟..........
خودم به این نتیجه رسیدم که اسکریپتی که ما مینویسیم فقط برای کدهای داخل فایل اصلی اعمال میشه یعنی مثلا index.php که تغییری نمیکنه و کلا بصورت استاتیکه و به مطالبی که بعدا داخل صفحه میشه ارتباطی پیدا نمیکنه ولی باز گفتم از شما بپرسم که مطمئن شم .... خیلی ممنون میشم راهنماییم کنی موفق باشی
استفاده ثابت از متد getElementsByTagName برای صفحاتی که خروجی داینامیک دارند و ممکن است در هر فراخوانی یا بعدها تغییراتی در نوع یا تعداد تگ ها داشته باشند می تواند منجر به کسب نتایج ناخواسته شود، عدد 5 یعنی ششمین تگ p موجود در صفحه جاری، اگر شمارش تگ ها در بارگذاری های بعدی جابجا یا کم و زیاد شود قاعدتا ششمین تگ دیگر مورد قبلی نیست و ممکن است تگ موجود نباشد یا تگ p دیگری انتخاب شود، اگر هدفتان انتخاب قسمت ثابتی است بهتر است از متد getElementById استفاده کنید.
نیما
۱۸:۰۷ ۱۳۹۸/۱۲/۰۳
سلام. من میخوام با استفاده از یک input مقدار عددی رو از کاربر دریافت کنم و بعد از ضرب در عددی خاص که خودم تعیین میکنم، حاصل رو در یک input دیگه نمایش بدم.
برای دریافت مقدار عددی از فیلد input و نمایش حاصل ضرب در فیلدی دیگر با جاوا اسکریپت می توانید از نمونه کد زیر الگوبرداری کنید:
<script>
function getSetValue(from, to, num){
var elm_from = document.getElementById(from);
var elm_to = document.getElementById(to);
var value = elm_from.value;
var result = parseInt(value) * parseInt(num);
elm_to.value = result;
}
</script>
<label for="input-from">فیلد:</label>
<input type="text" id="input-from">
<input type="button" value="ضرب" onclick="getSetValue('input-from', 'input-to', 15);"><br>
<label for="input-to">نتیجه:</label>
<input type="text" id="input-to">
امیر
۰۱:۳۹ ۱۳۹۸/۱۱/۲۰
سلام داداش جوابم رو حتما بده
کد زیر رو من بخواهم ul های داخلی menu-top (خود menu-top فقط ul های داخش) رو با یک دکمه مخفی و نمایش بدم با جاوا اسکریپت کدش چی میشه ؟
کد زیر رو من بخواهم ul های داخلی menu-top (خود menu-top فقط ul های داخش) رو با یک دکمه مخفی و نمایش بدم با جاوا اسکریپت کدش چی میشه ؟
<nav id="menu-top">
<ul>
<li>
</li>
</ul/>
</div>
کد جاو اسکریپتش رو میخواستم . منتظرم و اینجا میام سر میزنم تشکربرای ایجاد حالت نمایش و مخفی کردن تگ ul درون تگ واالد div می توانید از نمونه کد زیر الگوبرداری کنید:
<nav id="menu-top">
<ul>
<li>
</li>
</ul/>
</div>
<input type="button" value="Show/Hide" onclick="toggleShowHide('menu-top');">
<script>
function toggleShowHide(id) {
var elm = document.getElementById(id);
var ul = elm.getElementsByTagName('ul')[0];
if(ul.style.display === 'none'){
ul.style.display = 'block';
} else{
ul.style.display = 'none';
}
}
</script>
Sajedehpourhossein
۱۶:۳۶ ۱۳۹۷/۱۲/۰۴
سلام و خسته نباشید.... من میخوام یک تکست باکس در صفحه وبم ایجاد کنم که هر عددی که کاربر توش وارد میکنه (در خود صفحه ی خروجی) با زدن دکمه ی ثبت در صفحه به همون اندازه عدد برام ردیف جدول بکشه.... ممنون میشم راهنماییم کنین
برای ساخت جدول با جاوا اسکریپت حالت های مختلفی متصور است به همین دلیل بهتر است متدهای مربوطه را از اصول مقدماتی فرا بگیرید تا ویرایش دلخواه مثال زیر ممکن باشد:
<script>
function makeTable(div, input) {
var table_div = document.getElementById(div);
var table_input = document.getElementById(input);
var table_value = table_input.value;
var table_tag = document.createElement('TABLE');
table_tag.border = '1';
var table_body = document.createElement('TBODY');
table_tag.appendChild(table_body);
for(var r = 1; r <= table_value; r++) {
var tr = document.createElement('TR');
table_body.appendChild(tr);
for(var d = 1; d <= table_value; d++) {
var td = document.createElement('TD');
td.width = '100';
td.appendChild(document.createTextNode("Cell " + r + "," + d));
tr.appendChild(td);
}
}
table_div.appendChild(table_tag);
}
</script>
<div id="div-test"></div>
<label for="input-test">Table Cells:</label>
<input id="input-test" type="text">
<input type="button" value="Make Table!" onclick="makeTable('div-test', 'input-test');">
احمد
۱۴:۲۹ ۱۳۹۷/۱۱/۱۷
با سلام
من وقتی که توی یک صفحه به طور مرتب از innerHTML در ایجکس برای نمایش نتایج استفاده میکنم پردازش صفحه به سختی صورت میگیره و کند میشه و مجبور میشم که صفحه رو ریلود کنم. به نظر شما علت کند شدنش چیه و از چه راهی باید این مشکل رو برطرف کنم؟
من وقتی که توی یک صفحه به طور مرتب از innerHTML در ایجکس برای نمایش نتایج استفاده میکنم پردازش صفحه به سختی صورت میگیره و کند میشه و مجبور میشم که صفحه رو ریلود کنم. به نظر شما علت کند شدنش چیه و از چه راهی باید این مشکل رو برطرف کنم؟
دو احتمال زیر را بررسی کنید:
- مشکل از حجم زیاد اطلاعاتی است که با متد innerHTML دریافت و مجددا مقداردهی می کنید، برای رفع این حالت باید هر دریافت و درج پاسخ از موارد قبلی مستقل باشد، این کار با ایجاد بلاک های div با آی دی مجزا و به صورت داینامیک در خروجی امکانپذیر است، مثال:
- مشکل می تواند از تعداد زیاد درخواست های ای جکس در بازه زمانی کوتاه باشد که در این صورت می توانید تعداد درخواست ها را کاهش داده یا با توابعی مانند setTimeout و clearTimeout آنها را مدیریت کنید.
- مشکل از حجم زیاد اطلاعاتی است که با متد innerHTML دریافت و مجددا مقداردهی می کنید، برای رفع این حالت باید هر دریافت و درج پاسخ از موارد قبلی مستقل باشد، این کار با ایجاد بلاک های div با آی دی مجزا و به صورت داینامیک در خروجی امکانپذیر است، مثال:
<style>
.block {
width: auto;
height: 50px;
border: 1px solid #999;
margin: 2px;
}
</style>
<script>
var loop = 1;
var last;
function testInnerHTML(sort){
var elm = document.getElementById('result');
var div = document.createElement('div');
div.setAttribute('id', 'block-' + loop);
div.setAttribute('class', 'block');
div.innerHTML = 'New Result ' + loop + '!';
if(sort == 'up'){
elm.appendChild(div);
} else if(sort == 'down'){
if(last == 'undefined' || last == null ){
elm.appendChild(div);
last = document.getElementById('block-' + loop);
} else {
elm.insertBefore(div, last);
last = document.getElementById('block-' + loop);
}
}
loop++;
}
</script>
<div id="result"></div>
<input type="button" value="Test" onclick="testInnerHTML('down');">
تابع را با دو آرگیومنت up و down مقداردهی و با زدن دکمه F12 در مرورگر فایرفاکس خروجی HTML آن را بررسی کنید.- مشکل می تواند از تعداد زیاد درخواست های ای جکس در بازه زمانی کوتاه باشد که در این صورت می توانید تعداد درخواست ها را کاهش داده یا با توابعی مانند setTimeout و clearTimeout آنها را مدیریت کنید.
farazsh
۰۲:۱۷ ۱۳۹۷/۱۰/۱۵
با سلام
اساتید و دوستان کسی می دونه این صفحه چگونه مقدارها را بین یکدیگر دریافت می کنند لطفا راهنمایی بفرمایید صفحه توضیحات محصول زیر می باشد روی لینک کلیک کنید به دامنه دیگر می رود و در آن دامنه صفحه به صورت اتوماتیک id محصول را جایگزین می کند
لطفا راهنمایی بفرمایید
اساتید و دوستان کسی می دونه این صفحه چگونه مقدارها را بین یکدیگر دریافت می کنند لطفا راهنمایی بفرمایید صفحه توضیحات محصول زیر می باشد روی لینک کلیک کنید به دامنه دیگر می رود و در آن دامنه صفحه به صورت اتوماتیک id محصول را جایگزین می کند
http://site.hdom.ir/site/29364/html
این صفحه id محصول را چگونه دریافت می کند و دوباره به صفحه محصول انتقال می دهدhttp://ampf.ir/ap/
لطفا راهنمایی بفرماییدلطفا راهنمایی بفرمایید
با توجه به نمونه آدرس های درج شده و بررسی ما، پارامترها حداقل در مرحله قبل از پرداخت از طریق آدرس URL و متد GET منتقل می شوند، اعداد 470 و 30617 پارامترهایی هستند که شما از سرور دانلود فایل درخواست می کنید و سرور متناسب با درخواست شما محتوای مد نظر را نمایش می دهد.
زهرا
۲۲:۳۱ ۱۳۹۷/۰۷/۱۱
خدا قوت
ساییتون عالی هست.
ساییتون عالی هست.
مطهره
۱۳:۴۵ ۱۳۹۶/۰۶/۱۱
سلام خیلی خیلی ممنونم درست شد
مطهره
۰۴:۱۴ ۱۳۹۶/۰۶/۱۱
سلام ممنونم به خاطر سایت خوبتون سوالم اینه من یه صفحه دارم که یه سری اطلاعات رو از بانک میخونه و نشون میده قیمت کالام از بانک خونده میشه ولی تعدادش رو باید تو اینپوت باکس وارد کنم تا ضرب شه و تو فیلد اخر نشون داده بشه راهی نیست که بشه بدون اینکه وارد یه صفحه ی دیگه بشم این ضرب همونجا انجام بشه تگ اینپوت نمیدونم چه طوری تو متغیر بریزم تا ضرب انجام بدم؟
برای بدست آوردن مقدار از فیلد input یا مقداردهی آن می توانید از متد document.getElementById به همراه value استفاده کنید، مثال:
<label for="input-1-id">مقدار اول:</label>
<input id="input-1-id" type="text">
<label for="input-2-id">مقدار دوم:</label>
<input id="input-2-id" type="text">
<label for="input-3-id">نتیجه:</label>
<input id="input-3-id" type="text">
<input type="button" value="Click" onclick="doManipulation('input-1-id', 'input-2-id', 'input-3-id')">
<script type="text/javascript">
function doManipulation(id_1, id_2, id_3){
var input_1 = document.getElementById(id_1);
var input_2 = document.getElementById(id_2);
var input_3 = document.getElementById(id_3);
var get = input_1.value * input_2.value;
input_3.value = get;
}
</script>
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.