19 -آموزش جاوااسکریپت | بررسی ویژگیهای شیء Document
ویژگیهای شیء document را بررسی کنیم؛ شیئی که در محیط مرورگر، نمایندهی سند HTML بارگذاریشده است و زیرمجموعهای از window محسوب میشود.
در آموزش قبلی با DOM (Document Object Model) آشنا شدیم. حالا نوبت آن رسیده که ویژگیهای خود شیء document را بررسی کنیم؛ شیئی که در محیط مرورگر، نمایندهی سند HTML بارگذاریشده است و زیرمجموعهای از window محسوب میشود.
در این آموزش روی propertiesهای document تمرکز میکنیم، نه متدهای آن. متدها را در آموزش های بعدی بررسی خواهیم کرد.
برای اینکه از همان ابتدا دقیقاً بدانیم روی چه ساختاری کار میکنیم، ابتدا نمای HTML نمونه را میبینیم. در این آموزش، یک ul با کلاس collection داریم که شامل چند li با کلاس collection-item است و داخل هر آیتم نیز یک لینک قرار گرفته است:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.100.2/css/materialize.min.css">
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
<title>Task List</title>
</head>
<body>
<div class="container">
<div class="row">
<div class="col s12">
<div id="main" class="card">
<div class="card-content">
<span class="card-title">Task List</span>
<div class="row">
<form id="task-form">
<div class="input-field col s12">
<input type="text" name="task" id="task">
<label for="task">New Task</label>
</div>
<input type="submit" value="Add Task" class="btn">
</form>
</div>
</div>
<div class="card-action">
<h5 id="task-title">Tasks</h5>
<div class="input-field col s12">
<input type="text" name="filter" id="filter">
<label for="filter">Filter Tasks</label>
</div>
<ul class="collection"></ul>
<a href="#" class="clear-tasks btn black">Clear Tasks</a>
</div>
</div>
</div>
</div>
</div>
<script
src="https://code.jquery.com/jquery-3.2.1.js"
integrity="sha256-DZAnKJ/6XZ9si04Hgrsxu/8s717jcIzLy3oi35EouyE="
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.100.2/js/materialize.min.js"></script>
<script src="app.js"></script>
</body>
</html>
ویژگیهای مهم شیء document
1) دسترسی به کل سند HTML
document.all
این ویژگی یک HTMLCollection از تمام عناصر موجود در سند HTML برمیگرداند.
نکات مهم:
- شبیه آرایه است، اما آرایه نیست
lengthدارد- میتوان با ایندکس به عناصر آن دسترسی داشت
- متدهایی مثل
forEachروی آن کار نمیکنند
مثال:
console.log(document.all[0]);
console.log(document.all.length);
2) دسترسی به بخشهای اصلی سند
document.head
document.body
document.headبه تگ<head>دسترسی میدهدdocument.bodyبه تگ<body>دسترسی میدهد
3) اطلاعات سند و URL
document.doctype
document.domain
document.URL
document.characterSet
document.contentType
این ویژگیها اطلاعاتی دربارهی سند فعلی و محیط بارگذاری صفحه میدهند.
document.doctype→ نوع سندdocument.domain→ دامنه فعلیdocument.URL→ آدرس کامل صفحهdocument.characterSet→ مجموعه کاراکترهاdocument.contentType→ نوع محتوا
4) دسترسی به عناصر خاص بدون Selector
این روشها برای آشنایی مفیدند، اما در عمل معمولاً از Selectorها استفاده میشود.
فرمها
document.forms
یک HTMLCollection از همهی فرمهای صفحه برمیگرداند.
console.log(document.forms[0]);
console.log(document.forms[0].id);
console.log(document.forms[0].method);
console.log(document.forms[0].action);
لینکها
document.links
تمام تگهای <a> را برمیگرداند.
console.log(document.links[0]);
console.log(document.links[0].id);
console.log(document.links[0].className);
console.log(document.links[0].classList);
className→ رشتهای از کلاسهاclassList→ شیئی برای مدیریت کلاسها
تصاویر
document.images
تمام <img>های موجود در صفحه را برمیگرداند.
اسکریپتها
document.scripts
تمام تگهای <script> را برمیگرداند.
console.log(document.scripts[0].getAttribute('src'));
تفاوت HTMLCollection با آرایه
HTMLCollection مانند آرایه قابل پیمایش و دارای length است، اما متدهای آرایه را ندارد.
مثلاً این کد خطا میدهد:
document.scripts.forEach(script => {
console.log(script);
});
راهحل: تبدیل به آرایه
let scripts = document.scripts;
let scriptsArray = Array.from(scripts);
scriptsArray.forEach(script => {
console.log(script.src);
});
جمعبندی
در این آموزش با مهمترین ویژگیهای شیء document آشنا شدیم و یاد گرفتیم چگونه به بخشهای مختلف سند HTML دسترسی پیدا کنیم:
document.alldocument.headdocument.bodydocument.formsdocument.linksdocument.imagesdocument.scripts
همچنین تفاوت HTMLCollection با آرایه را بررسی کردیم و دیدیم که برای استفاده از متدهایی مثل forEach باید آن را به آرایه تبدیل کنیم.
در آموزش بعدی، سراغ Selectors در DOM میرویم تا روشهای استانداردتر و کاربردیتر برای انتخاب عناصر را یاد بگیریم.