проблема с firstChild
Всем привет!
Изучаю js по учебнику, и вот возникла не понятность с firstChild, в учебники пишут, что он возвращает первый дочерний элемент,написала вот такой скриптик, который почему то выдал объект Тext , а не элемент: <body> <p>This is a <i>simple</i> document.</p> </body>
window.onload=function(){
var childNodes = document.body.firstChild;
alert(childNodes);
}
По логике первый дочерний эелемент body является элемент <p> |
Цитата:
А элемент - это firstElementChild, но он отсутствует в IE8.
<body>
<p>This is a <i>simple</i> document.</p>
<script> alert(document.body.firstElementChild.outerHTML)</script>
</body>
Можно еще использовать children[0], он по идее вернет первый элемент, но в IE, если первым услом будет комментарий - он и будет возвращен (это неправильное поведение), но на практике такое редкость. Если нужна поддержка IE8, то можно использовать такой костыль:
if (!("firstElementChild" in document.documentElement)) {
Object.defineProperty(Element.prototype, "firstElementChild", {
get: function() {
var element = this.firstChild;
while (element && element.nodeType != 1) {
element = element.nextSibling;
}
return element;
}
});
}
|
хорошо, дочерний узел. Я просто изучаю js, и мне в данном примере надо понять,если узел - это, допустим, тег <p> и все, что внутри. Значит дочерним узлом по отношению к body является <p> и firstChild должен вернуть объект Element, а не объект Text
|
Цитата:
Первым узлом будет тег <p> вот в таком случае:
<script>onload = function() { alert(document.body.firstChild) }</script>
<body><p>This is a <i>simple</i> document.</p>
</body>
А в этом - будет текстовый узел, содержащий перенос строки, + четыре пробела + перенос строки + четыре пробела.
<script>onload = function() { alert(document.body.firstChild.data.replace(/\n/g, "↵").replace(/ /g, '•')) }</script>
<body>
<p>This is a <i>simple</i> document.</p>
</body>
|
danik.js,спасибо за ответ, теперь все прояснилось
|
| Часовой пояс GMT +3, время: 16:02. |