Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.12.2013, 14:00
Аватар для Nailya
Кандидат Javascript-наук
Отправить личное сообщение для Nailya Посмотреть профиль Найти все сообщения от Nailya
 
Регистрация: 05.04.2013
Сообщений: 135

проблема с 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>

Последний раз редактировалось Nailya, 22.12.2013 в 14:02.
Ответить с цитированием
  #2 (permalink)  
Старый 22.12.2013, 14:13
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Nailya
firstChild, в учебники пишут, что он возвращает первый дочерний элемент
Нет, это не так. Он возвращает первый дочерний узел.
А элемент - это 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;
        }
    });
}
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 22.12.2013, 14:27
Аватар для Nailya
Кандидат Javascript-наук
Отправить личное сообщение для Nailya Посмотреть профиль Найти все сообщения от Nailya
 
Регистрация: 05.04.2013
Сообщений: 135

хорошо, дочерний узел. Я просто изучаю js, и мне в данном примере надо понять,если узел - это, допустим, тег <p> и все, что внутри. Значит дочерним узлом по отношению к body является <p> и firstChild должен вернуть объект Element, а не объект Text
Ответить с цитированием
  #4 (permalink)  
Старый 22.12.2013, 16:06
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Nailya
в данном примере надо понять,если узел - это, допустим, тег <p>
Дело в том что пробельные символы тоже образуют узел в DOM-модели.
Первым узлом будет тег <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>
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #5 (permalink)  
Старый 22.12.2013, 16:33
Аватар для Nailya
Кандидат Javascript-наук
Отправить личное сообщение для Nailya Посмотреть профиль Найти все сообщения от Nailya
 
Регистрация: 05.04.2013
Сообщений: 135

danik.js,спасибо за ответ, теперь все прояснилось
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с радио кнопками px379 Общие вопросы Javascript 8 29.07.2013 09:30
Проблема с обработкой ескольких .hover() anocean jQuery 3 15.06.2012 22:43
Проблема с дизайном после отправки xmlhttprequest, Проблема с дизайном после отправки cyberx AJAX и COMET 3 01.05.2010 17:07
Проблема, в менюшке Большой джо Элементы интерфейса 0 12.07.2009 17:12
Проблема спама lliberty AJAX и COMET 1 12.03.2009 16:47