Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.05.2016, 22:25
Аспирант
Отправить личное сообщение для xintrea Посмотреть профиль Найти все сообщения от xintrea
 
Регистрация: 02.01.2011
Сообщений: 56

Что-то я запутался со свойством children и методом children() в DOM
Народ, пару лет назад написал скрипт, в котором использовалась такая конструкция:

var recordCount=currentElement.children("recordtable").children("record").length;

она работала во всех браузерах, от Firefox и Konqueror до IE8.

Я уже забыл что такое яваскрипт. А сейчас смотрю - скрипт не работает. Стал дебажиться, а проблема вот в этой строчке. Сколько бы не было элементов record, всегда получаем 1.

Полез на W3C, смотрю: в DOM-модели есть только children как свойство, а children() как метода нет:

http://www.w3schools.com/jsref/dom_obj_all.asp

Я то ли отстал от жизни, то ли уже новые движки по-другому работают. Я уже и не помню, почему использовал имя элемента в качестве параметра children(), и оно работало. Факт в том, что теперь не работает.

Вопроc: как по-быстрому исправить?
Ответить с цитированием
  #2 (permalink)  
Старый 20.05.2016, 00:13
Аспирант
Отправить личное сообщение для xintrea Посмотреть профиль Найти все сообщения от xintrea
 
Регистрация: 02.01.2011
Сообщений: 56

Сообщение от Rise Посмотреть сообщение
xintrea, это jquery метод, а не DOM-модели.
Я это понял уже...

Проблема оказалась в другом. Сразу после парсинга XML через parseFromString(), элементы одного уровня становятся вложенными. И поэтому у каждого элемента только один дочерний элемент. Это не поддается никакой логике.

Например, XML-код такой:

Код:
<root>
 <format version="1" subversion="1"/>
 <content>
  <node id="1372502371bty1nking9" name="Компьютеры">
   <node id="1372921359br7f0f5w5r" name="Железо">
    <recordtable>
     <record tags="ATX, корпус.." id="1372924870fja1yb6mmw"/>
     <record tags="POST-коды..." id="137294581524gn1ywu1h"/>
    </recordtable>
   </node>
 ...
А вот как выглядит объектное дерево:



У меня все это дело висит в онлайне, можно убедиться:

1. Открываешь URL http://webhamster.ru/webmytetra

2. В появившемся окне вставляешь: https://raw.githubusercontent.com/xi...er/mytetra.xml. Можешь открыть этот URL в браузере чтобы видеть с какими данными идет работа.

3. Открываешь дебагер, ставишь брекпоинт в файле tree.js на строку 197 (это сабжевая проблемная строка)

4. Пару раз после остановки нажимаешь продолжение, пока переменная nodeName не станет «Железо». Именно тогда будет два элемента record, а конструкция вернет в recordCount единицу.
Изображения:
Тип файла: jpg scr_383.jpg (12.9 Кб, 2 просмотров)
Ответить с цитированием
  #3 (permalink)  
Старый 20.05.2016, 08:23
Аспирант
Отправить личное сообщение для xintrea Посмотреть профиль Найти все сообщения от xintrea
 
Регистрация: 02.01.2011
Сообщений: 56

Сообщение от Rise Посмотреть сообщение
xintrea, а пробел не обязателен разве перед /> в xml?
По стандарту не обязателен.

https://www.w3.org/TR/xml/#dt-empty

EmptyElemTag ::= '<' Name (S Attribute)* S? '/>'

В регулярке написано "S?", где S::=(#x20 | #x9 | #xD | #xA)+ - пробельный символ, а ? - это 0 или 1 раз.

Последний раз редактировалось xintrea, 20.05.2016 в 08:35.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
http://gigalit.info - Мои контакты Маэстро Ваши сайты и скрипты 70 08.12.2011 03:12
фрактальный сыр x-yuri Оффтопик 76 23.11.2011 21:59
Функция изменения DOM, нужно разобраться что и как fiw Общие вопросы Javascript 1 03.11.2011 08:43
О фрилансе (Личный опыт) free Оффтопик 105 18.08.2011 17:02
Как узнать, что DOM сформирован dmeet AJAX и COMET 1 10.08.2009 17:09