Последний метод класса NewsTickerFeed - это уже упоминавпп тод populateTicker(), вызываемый из метода pollQ. Этот метод] мает в виде аргумента значение свойства responseText объекта; и разбирает его с помощью объекта XParser:
NewsTickerFeed.prototype.populateTicker = function (sXml) { -var oParser = new XParser(sXml, true); .
Если в Xparser во втором аргументе передать значение true, то i терпретирует первый аргумент как ссылку на сериализованны^ мент XML и не пошлет свой собственный запрос XMLHttp. После ] документа XML можно приступить к созданию кода HTML:
NewsTickerFeed.prototype.populateTicker = function (sXml) { var oParser = new XParser(sXml, true);
var'spanLinkContainer = document. createElement(."span"); .
var aFeedTitle = document.createElement("a"); aFeedTitle. className = "newsTicker-feedTitle";.- ' aFeedTitle.href = oParser.link.value;
aFeedTitle.target = "_new";
aFeedTitle.innerHTML = oParser.title.value;
spanLinkContainer.appendChild(aFeedTitle);
>
Ha первом этапе создается элемент, который будет содержать все ги¬перссылки. Это делается исключительно ради удобства: при обновле¬нии гораздо проще удалять один элемент вместе со всеми его дочерни¬ми элементами, чем удалять несколько элементов. Кроме того, не пу¬тайте этот контейнерный элемент со свойством container. Последнее содержит в себе spanLinkContainer.
Для отделения в бегущей строке одной группы новостей от другой слу¬жит заголовок группы. Это тоже гиперссылка, по щелчку на которую открывается новое окно и выполняется переход на сайт - источник этой группы новостей. Этой гиперссылке присваивается класс CSS news-Ticker-f eedTitle, и она также добавляется в элемент spanLinkContainer.
Затем в процессе обхода элементов массива items объекта XParser созда¬ются гиперссылки на новости:
NewsTickerFeed.prototype.populateTicker = function (sXml) { var oParser = new XParser(sXml, true);
var spanLinkContainer = document.createElement("span");
var aFeedTitle = document.createElement("a"); aFeedTitle.className = "newsTicker-feedTitle"; aFeedTitle.href = oParser.link.value; aFeedTitle.target = "_new"; aFeedTitle.innerHTML = oParser.title.value;
spanLinkContainer.appendChild(aFeedTitle);
for (var 1 = 0; i < oParser. items, length; i++) {
var item = oParser.itemsfi]; . .
var aFeedLink = document.createElementC'a"); aFeedLink.href = item.link.value;
aFeedLink.target = "_new";
aFeedLink.className = "newsTicker-feedltem"; . -aFeedLink.innerHTML = item.title.value;
spanLinkContainer. appendChild(aFeedLink);
}
Каждая гиперссылка имеет класс CSS newsTicker-feedltem и при акти¬визации открывает новое окно. Сформированная гиперссылка добав¬ляется в контейнер spanLinkContainer, который после этого можно доба¬вить в бегущую строку:
NewsTickerFeed.prototype.populateTicker = function (sXml) { var oParser = new XParser(sXml, true);
var spanLinkContainer = document.createElement("span");
var aFeedTitle = document.createElementC'a"); aFeedTitle.className = "newsTicker-feedTitle"; aFeedTitle.href = oParser.link.value; aFeedTitle.target = "_new"; aFeedTitle.innerHTML = oParser.title.value;
spanLinkContainer.appendChild(aFeedTitle);
for (var i = 0; i < oParser.items.length; i++) { var item = oParser.items[i];
var aFeedLink = document.createElementC'a"); aFeedLink.href = item.link.value; aFeedLink.target = "_new"; aFeedLink.className = "newsTicker-feedltem"; aFeedLink.innerHTML = item.title.value;
spanLinkContainer.appendChild(aFeedLink);
if (!this.container) { ^
this.container = document.createElement("span");
this.container.className = "newsTicker-feedContainer";
this.parent.ticker.appendChild(this.container);
> else { .
this.container.removeChild(this.container.firstChild):
this.container.appendChild(spanLinkContainer);
}
Сразу после создания экземпляра класса NewsTickerFeed свойс tainer имеет значение null. На то есть несколько причин. ВО-Е вы наверняка еще помните, что таким образом предотвращав полнение анимации. Чтобы избежать преждевременного запус мации, элемент, на который ссылается свойство container, не; добавляться в документ, пока группы новостей не будут по проанализированы и преобразованы в код HTML. По этой прв бавление бегущей строки (свойство container) в ленту новостей] водится в методе populateTicker().
Во-вторых, эта операция выполняется в методе populateTicker( ),I му очень важно, чтобы одна и та же группа новостей не была до в бегущую строку несколько раз, в противном случае бегущая i будет «вести себя» неадекватно (и может даже вызвать крах бр Таким образом, если свойство container содержит значение null.i дается элемент , который добавляется в ленту новостей,] тивном случае удаляется содержимое бегущей строки и затем BI бавляется вновь созданное содержимое.
Разумеется, отображаемые данные будут выглядеть скучно, оформить их со вкусом.