Обозначение объектов для элементов DOM - PullRequest
3 голосов
/ 01 августа 2011

В следующем примере есть массивоподобный объект для элементов DOM, и есть одна вещь, которая мне не ясна.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>

<script type="text/javascript">
window.onload = function(){

    for(var prop in document.links){
        alert(prop); // It does not alert foo!
    }

}
</script>
</head>
<body>

<a name="foo" href="#">foo</a>

</body>
</html>

Теоретически обозначение объекта для доступа к реквизиту: obj.prop. В объектном массиве должны быть числовые обозначения для элементов объекта: obj[0] и obj.length.


И предупреждение дает: 0, length, item, namedItem. Первые два взяты из теории объектных массивов, а два других могут использоваться для доступа к реквизиту.


И, наконец, эта ссылка может быть найдена как document.links[0] и document.links.foo. В document.links нет foo реквизита. Зачем? Спасибо.

Ответы [ 2 ]

1 голос
/ 03 августа 2011

Причина document.links.foo недоступна в том, что вы используете name, а не id. Если вы измените свою разметку на:

<a id="foo" href="#">foo</a>

Тогда это будет работать :

window.onload = function(){
    window.alert(document.links.foo.innerHTML);
}
0 голосов
/ 01 августа 2011

Вы передаете сам элемент DOM в «alert ()». Как насчет передачи атрибута "name"?

for(var prop in document.links){
    alert(prop.name);
}

Теперь, действительно, плохая идея - перебирать список узлов следующим образом:

for (var i = 0; i < document.links.length; ++i)
  alert(document.links[i].name);

Если вы хотите текстовое содержимое узла, то вы можете попробовать это:

for (var i = 0; i < document.links.length; ++i)
  alert(document.links[i].innerHTML);

Вы также можете найти его дочерние текстовые узлы и извлечь их значение.

Обратите внимание, что объект "links" также будет содержать теги <area>, если они у вас есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...