проблема с 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, время: 19:01. |