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, получилось, очень благодарен.

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.


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


Свернуть

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

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Вопрос по поводу цен на сайте
16 WildWeb8 933 13.5.2018, 17:40
автор: genjnat
Открытая тема (нет новых ответов) Вопрос к тем, кто зарабатывает на недвижимости?
Как заработать на недвижке.?
15 Dross 2748 26.4.2018, 18:26
автор: megachange
Открытая тема (нет новых ответов) Вопрос по сетке сайтов
Стоит ли так делать?
10 asskra 1416 12.4.2018, 22:33
автор: Ancitrus
Открытая тема (нет новых ответов) Вопрос по расингу контента
5 gold15 668 2.4.2018, 19:18
автор: mmkulikov
Открытая тема (нет новых ответов) Вопрос по метрике
3 Bel_Ami 724 6.3.2018, 16:48
автор: richif


 



RSS Текстовая версия Сейчас: 22.5.2018, 18:37
Дизайн