گرفتن مقادیر (DOM Get Values)
در DOM همه چیز «گره (Node)» است. مقدار متن عنصر مستقیم نیست. متن داخل «گره متن (Text Node)» است. پس برای گرفتن مقدار، باید به گره متن برسیم.
گرفتن مقدار یک عنصر
عنصر مقدار مستقیم ندارد. مقدار واقعی در فرزند «گره متن» قرار دارد.
متد getElementsByTagName
این متد یک «فهرست گره ها (NodeList)» از تگ های خواسته شده می دهد. ترتیب، مثل سند منبع است.
var x;
x = xmlDoc.getElementsByTagName("title")[0];
ویژگی childNodes
childNodes فهرستِ فرزندها را می دهد. اولین فرزند یک عنوان، معمولاً گره متن است.
var x;
var y;
x = xmlDoc.getElementsByTagName("title")[0];
y = x.childNodes[0];
ویژگی nodeValue
nodeValue مقدار «گره متن» را برمی گرداند. برای عنصر، تعریف نشده است.
var x;
var y;
var z;
x = xmlDoc.getElementsByTagName("title")[0];
y = x.childNodes[0];
z = y.nodeValue;
نمونه کامل: گرفتن متن اولین <title>
در این نمونه، XML را می خوانیم و مقدار گره متنِ عنوان را نمایش می دهیم.
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
var xhttp;
xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
myFunction(this);
}
};
xhttp.open("GET", "books.xml", true);
xhttp.send();
function myFunction(xml) {
var xmlDoc;
var x;
var y;
xmlDoc = xml.responseXML;
x = xmlDoc.getElementsByTagName("title")[0];
y = x.childNodes[0];
document.getElementById("demo").innerHTML = y.nodeValue;
}
<\/script>
</body>
</html>
گرفتن مقدار یک ویژگی (Attribute)
ویژگی ها خودشان «گره» هستند و مقدار متنی دارند. راه استاندارد، getAttribute است.
روش اول: getAttribute()
مقدار ویژگی را مستقیم می دهد. ساده و خوانا است.
var title;
var txt;
title = xmlDoc.getElementsByTagName("title")[0];
txt = title.getAttribute("lang");
گرفتن همه category های <book>
var books;
var i;
var txt;
books = xmlDoc.getElementsByTagName("book");
txt = "";
for (i = 0; i < books.length; i++) {
txt = txt + books[i].getAttribute("category") + "<br>";
}
روش دوم: getAttributeNode()
این روش «گره ویژگی» را می دهد. سپس از nodeValue برای مقدار استفاده کن.
var title;
var langAttr;
var txt;
title = xmlDoc.getElementsByTagName("title")[0];
langAttr = title.getAttributeNode("lang");
txt = langAttr.nodeValue;
حلقه با getAttributeNode
var books;
var i;
var txt;
books = xmlDoc.getElementsByTagName("book");
txt = "";
for (i = 0; i < books.length; i++) {
txt = txt + books[i].getAttributeNode("category").nodeValue + "<br>";
}
گام های عملی
- فهرست تگ ها را با getElementsByTagName بگیر.
- به childNodes برو و گره متن را بردار.
- با nodeValue مقدار متن را نمایش بده.
- برای ویژگی ها از getAttribute یا getAttributeNode استفاده کن.
برای ناوبری سریع تر، سر بزن به «گرفتن مقادیر DOM» در کنار «تنظیم مقادیر DOM».
جمع بندی سریع
- متن عنصر در گره متن است.
- nodeValue مخصوص گره متن است.
- getAttribute ساده و مستقیم است.
- getAttributeNode کنترل بیشتری می دهد.