X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость ( Вход | Регистрация )

Открыть тему
Тема закрыта
> Вопрос по DOM
kronos
kronos
Topic Starter сообщение 5.12.2011, 20:25; Ответить: kronos
Сообщение #1


Белый веб-мастер
*******


Группа: Active User
Сообщений: 4703
Регистрация: 10.2.2009
Из: Харьков
Поблагодарили: 2629 раз
Репутация:   327  


Добры день, прошу помощи у специалистов.
DOM модель строится, проблем в следуещем - с RSS парсятся тайтлы и описания, в роли которого выступает изображение <img src="..." alt="..." />

Код парсера
        var sTitle    = document.createTextNode(this.aXML[iI]['title']+" "); // текст
        var sDesc    = document.createTextNode(this.aXML[iI]['description']+" "); // <img ... />
        
        var oDate    = document.createElement('span');
        oDate.className    = "dtSmall";
        oDate.innerHTML    = "("+ getDateTime(this.aXML[iI]['pubDate']) +")";
        
        oA.appendChild(sTitle);
        oA.appendChild(sDesc);
        oA.appendChild(oDate);


Соотственно
var sDesc    = document.createTextNode(this.aXML[iI]['description']+" ");

Выдает в html тег img.

Как вывести картинку?


--------------------
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
AleXSuS
AleXSuS
сообщение 5.12.2011, 21:14; Ответить: AleXSuS
Сообщение #2


Бывалый
****

Группа: User
Сообщений: 352
Регистрация: 3.12.2008
Поблагодарили: 119 раз
Репутация:   31  


Выводит тег без адреса картинки? Или выводит тег, как текст?
Поподробнее бы. И код парсера в целом глянуть.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
kronos
kronos
Topic Starter сообщение 6.12.2011, 1:28; Ответить: kronos
Сообщение #3


Белый веб-мастер
*******


Группа: Active User
Сообщений: 4703
Регистрация: 10.2.2009
Из: Харьков
Поблагодарили: 2629 раз
Репутация:   327  


(AleXSuS @ 5.12.2011, 20:14) *
Выводит тег без адреса картинки?

Выводит HTML код <img ...>, а должен показывать саму картинку.
Это гаджет для windows 7
Код
Gadget.populateXML    = function()
{
    if (typeof oGadget.aXML == "undefined")
    {
        setTimeout("oGadget.populateXML()",10);
        return false;
    }
        
    var oUL    = document.createElement('ul');

    for (var iI=0;iI<this.aXML.length;iI++)
    {
        var oLI    = document.createElement('li');
        
        var oA    = document.createElement('a');
        oA.href        = this.aXML[iI]['link'];
        oA.title    = this.aXML[iI]['title'];
        oA.description    = this.aXML[iI]['description'];

        oA.onclick    = function()
        {
            open(this.href,'','');
            return false;
        }
        
        var sTitle    = document.createTextNode(this.aXML[iI]['title']+" ");
        var sDesc    = document.createTextNode(this.aXML[iI]['description']+" ");
        
        var oDate    = document.createElement('span');
        oDate.className    = "dtSmall";
        oDate.innerHTML    = "("+ getDateTime(this.aXML[iI]['pubDate']) +")";
        
        oA.appendChild(sTitle);
        oA.appendChild(sDesc);
        oA.appendChild(oDate);
        
        oLI.appendChild(oA);

        // CUSTOM CLASSNAMES
        if (iI == 0)
        {
            oLI.className    = "first";
            var oA    = document.createElement('a');
            oA.className    = "aLue";
            oA.appendChild(document.createTextNode('Другие последние публикации:'));
            oLI.appendChild(oA);
        }
        else if (iI > 1)
            oLI.className    = "overflow";

        oUL.appendChild(oLI);
    }
    
    // remove existing childs in reverse order
    for (var iI=(this.oXMLTarget.childNodes.length - 1);iI >= 0;iI--)
    {
        var aChild = this.oXMLTarget.childNodes[iI];
        this.oXMLTarget.removeChild(aChild);
    }

    // add the new child
    this.oXMLTarget.appendChild(oUL);
}



Еще код, сам парсер RSS
Gadget.handleXML    = function()
{
    //    XML --> RSS
    this.aXML    = [];
    var aItem    = oXML.responseXML.getElementsByTagName('item');

    for (var iI=0;iI<aItem.length;iI++)
    {
        var aTemp    = [];
    
        for (var iA=0;iA<aItem[iI].childNodes.length;iA++)
        {
            var aNode = aItem[iI].childNodes[iA];

            if (aNode.nodeType != 3 && aNode.childNodes.length > 0)    // EI TEXT (tai tyhja)
            {
                var aNodeName = aNode.nodeName;
                var aNodeData = aNode.childNodes[0].data;
                aTemp[aNodeName] = aNodeData;
            }
        }

        this.aXML.push(aTemp);
    }
}


Проблема в выводе
var sDesc = document.createTextNode(this.aXML[iI]['description']+" ");
Ибо он выглядит так
<description><![CDATA[<img align="right" src="http://tattooha.com/components/com_mtree/img/listings/s/9563.jpg" alt="Демон с драконом" />]]></description>
И выводится как текст <img..., как сделать присобачить туда изображение само? Создть элмент [img] ? Но как тогда распарить первоначальный img.


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
AleXSuS
AleXSuS
сообщение 6.12.2011, 4:59; Ответить: AleXSuS
Сообщение #4


Бывалый
****

Группа: User
Сообщений: 352
Регистрация: 3.12.2008
Поблагодарили: 119 раз
Репутация:   31  


Ну проблема в том, что document.createTextNode - создаёт текстовый узел и в нём теги не работают.
Нужно немного переделать этот участок с использованием document.createElement('img'). Например, так:

                            var img = document.createElement( "img" );
                            attr = document.createAttribute( "src" );
                            attr.value = "img.gif";
                            img.setAttributeNode( attr );


Но переменные нужно назвать, как у вас. Честно признаюсь, не встречался с гаджетами и как там это устроено. Но если скинете его, то я думаю смогу помочь вам.

Сообщение отредактировал AleXSuS - 6.12.2011, 4:59


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
kronos
kronos
Topic Starter сообщение 6.12.2011, 13:44; Ответить: kronos
Сообщение #5


Белый веб-мастер
*******


Группа: Active User
Сообщений: 4703
Регистрация: 10.2.2009
Из: Харьков
Поблагодарили: 2629 раз
Репутация:   327  


(AleXSuS @ 6.12.2011, 3:59) *
Но если скинете его, то я думаю смогу помочь вам.

Я думаю в этом нет необходимости, это чистый JavaScript и проблема в нём.

Окей, идею понял, вопрос только как распарсить тогда исхондный полученный из RSS путь на картинку.

Структура такая:
<item>
    <title>Дракон и череп дракона</title>
    <link>http://feedproxy.google.com/~r/tattoohacom/~3/g0wUe8o1OT4/7791</link>
    <description><![CDATA[<img align="right" src="http://tattooha.com/components/com_mtree/img/listings/s/9568.jpg" alt="Дракон и череп дракона" />]]></description>
    <author>misha</author>
    <pubDate>Tue, 06 Dec 2011 02:33:50 +0100</pubDate>
    <guid isPermaLink="false">http://tattooha.com/cat/fentezi/drakony/7791</guid>
<feedburner:origLink>http://tattooha.com/cat/fentezi/drakony/7791</feedburner:origLink></item>


А this.aXML[iI]['description'] Будет возвращать то что в теге description соотственно, <![CDATA[<img align="right" src="http://tattooha.com/components/com_mtree/img/listings/s/9568.jpg" alt="Дракон и череп дракона" />]]>. Как оттуда выдрать src ? Регулярки?


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
AleXSuS
AleXSuS
сообщение 6.12.2011, 14:56; Ответить: AleXSuS
Сообщение #6


Бывалый
****

Группа: User
Сообщений: 352
Регистрация: 3.12.2008
Поблагодарили: 119 раз
Репутация:   31  


Вот набросал код, чтобы проверить - вроде работает:
var pattern = new RegExp('(http|https|)(://|)([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?', 'i');
var sDesc = '<![CDATA[<img align="right" src="http://tattooha.com/components/com_mtree/img/listings/s/9563.jpg" alt="Демон с драконом" />]]>';
var ans = pattern.exec(sDesc);
alert(ans[0]);

В переменной ans[0] будет: http://tattooha.com/components/com_mtree/i...ings/s/9563.jpg
Думаю вы сможете по аналогии сделать для своего скрипта.

Правда регулярка не идеальная, я их вообще не очень люблю, взял с какого-то старого скрипта, поэтому в переменную ans попадают ещё кое-какие лишние значения, но если ограничить по первому совпадению, то сначала идёт полный урл.

Сообщение отредактировал AleXSuS - 6.12.2011, 14:58
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
kronos
kronos
Topic Starter сообщение 6.12.2011, 15:14; Ответить: kronos
Сообщение #7


Белый веб-мастер
*******


Группа: Active User
Сообщений: 4703
Регистрация: 10.2.2009
Из: Харьков
Поблагодарили: 2629 раз
Репутация:   327  


AleXSuS, получилось, очень благодарен.


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Вопрос по seo для интернет магазина
куда девать продвинутые товары, которые уже не выпускают
18 viktormerke 2815 15.12.2017, 15:18
автор: Smspva
Открытая тема (нет новых ответов) Вопрос к знатокам Instagram
20 SEOMR 4191 30.11.2017, 14:25
автор: DiscordPro
Открытая тема (нет новых ответов) Вопрос про Телеграмм
18 syd2010 1173 28.11.2017, 14:25
автор: PostBrigada
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыАrticle manager вопрос
0 Smile3D 441 24.11.2017, 18:27
автор: Smile3D
Открытая тема (нет новых ответов) Вопрос по трансферу доменов
8 MakDonald 1208 13.11.2017, 11:40
автор: bum


 



RSS Текстовая версия Сейчас: 18.12.2017, 0:04
Дизайн