Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.02.2013, 12:36
Аватар для viy.li
Аспирант
Отправить личное сообщение для viy.li Посмотреть профиль Найти все сообщения от viy.li
 
Регистрация: 23.02.2011
Сообщений: 49

помогите с previousSibling...
Изучаю по книге Девида Макфаланда JavaScript. И там такой пример по нахождению братских узлов. НО он не работает. Нету у <p> братьев.

Код:
<!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>новая страница</title>
<script type="text/javascript" src="jquery-1.7.2.min.js"></script>

</head>

<body>


<p id="header">Paragraf</p>



<script type="text/javascript">

var x = document.getElementById('header');
var y = x.previousSibling;
if (!y) {
alert ('данному узлу другие узлы не предшествуют!');
} else {alert ('узел существует')}
</script>


</body>
</html>
Обьясните что делать?
Может какой другой пример есть рабочий?
Ответить с цитированием
  #2 (permalink)  
Старый 14.02.2013, 12:38
Аватар для viy.li
Аспирант
Отправить личное сообщение для viy.li Посмотреть профиль Найти все сообщения от viy.li
 
Регистрация: 23.02.2011
Сообщений: 49

А пишет что есть братья...
Ответить с цитированием
  #3 (permalink)  
Старый 14.02.2013, 12:56
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Да, все верно, есть братья - текстовая нода. Об этом не написано в книжке? И разве автор не рассказывает о DOM-инспекторе, встроенном в каждый браузер, средствах отладки и тд? Если так, можете смело выкидывать свою книжку на помойку...

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8" />
<title>новая страница</title>

</head>

<body>

<p id="header">Paragraf</p>

<script>
    (function(){
        var x = document.getElementById('header');
        var y = x.previousSibling;
        if (!y) {
            alert ('данному узлу другие узлы не предшествуют!');
        } else {
            alert ('узел существует, nodeName:' + y.nodeName + ', nodeValue:[' + y.nodeValue + ']');
        }
        var z = x.previousElementSibling;
        if (!z) {
            alert ('данному элементу другие элементы не предшествуют!');
        }
    })();
</script>


</body>
</html>

И причем тут jQuery вообще?

Откройте для себя Firebug/Chrome Developer Tools, console.log, точки останова, DOM-инспектор и тд и тп. И забейте на jQuery пока не разберетесь с самим языком javascript и работой нативных методов/свойств
Ответить с цитированием
  #4 (permalink)  
Старый 14.02.2013, 13:00
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Ответить с цитированием
  #5 (permalink)  
Старый 14.02.2013, 13:16
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

viy.li,
<body>
тут у вас пустой текстовый элемент

<p id="header">Paragraf</p>
Ответить с цитированием
  #6 (permalink)  
Старый 16.02.2013, 12:04
Аватар для viy.li
Аспирант
Отправить личное сообщение для viy.li Посмотреть профиль Найти все сообщения от viy.li
 
Регистрация: 23.02.2011
Сообщений: 49

Сообщение от danik.js Посмотреть сообщение
Да, все верно, есть братья - текстовая нода. Об этом не написано в книжке? И разве автор не рассказывает о DOM-инспекторе, встроенном в каждый браузер, средствах отладки и тд? Если так, можете смело выкидывать свою книжку на помойку...

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8" />
<title>новая страница</title>

</head>

<body>

<p id="header">Paragraf</p>

<script>
    (function(){
        var x = document.getElementById('header');
        var y = x.previousSibling;
        if (!y) {
            alert ('данному узлу другие узлы не предшествуют!');
        } else {
            alert ('узел существует, nodeName:' + y.nodeName + ', nodeValue:[' + y.nodeValue + ']');
        }
        var z = x.previousElementSibling;
        if (!z) {
            alert ('данному элементу другие элементы не предшествуют!');
        }
    })();
</script>


</body>
</html>

И причем тут jQuery вообще?

Откройте для себя Firebug/Chrome Developer Tools, console.log, точки останова, DOM-инспектор и тд и тп. И забейте на jQuery пока не разберетесь с самим языком javascript и работой нативных методов/свойств
По книге автор прикрепляет библиотеку jQuery. И пишет что это свойство данной библиотеки.

Сообщение от danik.js Посмотреть сообщение
Эту консоль как открыть и где? Очень похоже на Хром...
Ответить с цитированием
  #7 (permalink)  
Старый 16.02.2013, 12:27
Аватар для viy.li
Аспирант
Отправить личное сообщение для viy.li Посмотреть профиль Найти все сообщения от viy.li
 
Регистрация: 23.02.2011
Сообщений: 49

Сообщение от danik.js Посмотреть сообщение


alert ('узел существует, nodeName:' + y.nodeName + ', nodeValue:[' + y.nodeValue + ']');
Здесь в алерте какую то билеберду выкидывает... Можно как нибудь доработать чтобы все правильно отображалось...
Ответить с цитированием
  #8 (permalink)  
Старый 16.02.2013, 12:51
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от viy.li
И пишет что это свойство данной библиотеки
Че за бредятина? Либо ты не правильно понял, либо автор олень. Еще раз - забудь про jQuery, изучи голый JavaScript. Если конечно есть желание нормально разобраться во всем этом.

У текстовых нод nodeName равно '#text'. Хотя я не вкурсе, описано ли это стандартами. А nodeValue я в квадратные скобки взял чтобы были видны пробелы и переносы строк. Короче, все пробелы, переносы строк и просто текст, соседствующий с Элементами на самом деле находятся в текстовой ноде. Это отлично видно в DOM-инспекторе (смотри скрин).

Есть понятие Элемент (Element), есть понятие Узел (Node). Элемент наследует от Node.

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


Сообщение от viy.li
Эту консоль как открыть и где? Очень похоже на Хром
Да, это хром. Вкладка Elements -> справа вкладка Properties

В консоли есть автозавершение, очень полезно поиграться в ней. Ставишь точку, получаешь все свойства и методы объекта.

Походу книжка твоя - шлак. Народ, посоветуйте чего дельного почитать.
Ответить с цитированием
  #9 (permalink)  
Старый 16.02.2013, 13:24
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

viy.li,
чтобы всё работало напишите теги слитно
<body><p id="header">Paragraf</p>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите новичку! Анатолий Саратовцев Events/DOM/Window 7 04.08.2012 17:46
Помогите с replace! faforty Общие вопросы Javascript 2 28.08.2011 13:10
Помогите! Многоуровневые вкладки! sergeeeeee Элементы интерфейса 2 02.08.2010 23:50
Помогите написать скрипт для корзины Deep Элементы интерфейса 1 19.06.2010 14:46
Люди, ПОМОГИТЕ! Bel666 jQuery 11 27.04.2010 15:38