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



 

Здравствуйте, гость (

| Вход | Регистрация )

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


Добры день, прошу помощи у специалистов.
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


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


(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


Ну проблема в том, что 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


(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


Вот набросал код, чтобы проверить - вроде работает:
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


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

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


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


Свернуть

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

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Вопрос - платное размещение баннеров на сайте
10 WGN 3125 14.12.2020, 14:20
автор: Peterson
Открытая тема (нет новых ответов) Вопрос по рекламе в "инстаграме"
Только активные аккаунты могут создавать или редактировать рекламу
8 Zubkov 16020 17.1.2020, 17:49
автор: Forumacc
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыВопрос-ответ о работе форума
307 dos1k 43056 9.11.2019, 17:59
автор: heks
Открытая тема (нет новых ответов) Жена логопед, собрался ей приводить клиентов. Встал вопрос, куда приводить.
В теме перечисление доступного мне продвижения, но с чего начать?
9 memeplex 3689 16.2.2019, 15:45
автор: zyzy
Открытая тема (нет новых ответов) Предлагаю размещение качественных ссылок на форумах и сервисах вопрос ответ
21 ПроФФи 4960 2.3.2018, 20:56
автор: ShowPrint


 



RSS Текстовая версия Сейчас: 28.3.2024, 20:45
Дизайн