Управление данными из XML-канала с использованием jQuery - PullRequest
0 голосов
/ 03 августа 2011

Я извлекаю данные XML и включаю их в файл HTML с помощью jQuery, и я немного застрял при попытке манипулировать форматом.

Позвольте мне предоставить еще некоторые данные о том, что я 'я делаю:

У меня есть несколько jQuery для извлечения внешнего XML:

<script type="text/javascript">
<!--
jQuery.fn.xml=function(a){
    var b="";
    if(this.length)(typeof a!="undefined"&&a?this:jQuery(this[0]).contents()).each(function(){
        b+=window.ActiveXObject?this.xml:(new XMLSerializer).serializeToString(this)});
        return b
    }
    $(document).ready(function(){
        $('div.cnetxml').each(function(index) {
            var var_url = $(this).attr('data');
            var var_digcontent_name = $(this).attr('id');
            var obj_divcnetxml = $(this);
            $.getJSON("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22"+encodeURIComponent(var_url)+"%22&format=xml'&callback=?",function(data){
                if(data.results[0]){
                    var data = data.results[0];
                    obj_divcnetxml.html($( $.parseXML( data ) ).find( "ul" ).xml());
                    };
                    obj_divcnetxml.removeClass('hide');
                }
            }
        );                                
    });
});
-->
</script>
<div class="cnetxml hide" data="http://cdn.cnetcontent.com/30/7f/307f280c-15f2-4e3e-9391-4e09c9ecc450.xml" id="cnet_DigitalContentProductDescription"> </div>

Проверьте файл XML , чтобы увидеть формат.

Полученный формат выглядит примерно так без тега переноса списка неупорядоченных элементов:


<li>Item 01 Header</li>
<li>Item 01 Description</li>
<li>Item 02 Header</li>
<li>Item 02 Description</li>
<li>Item 03 Header</li>
<li>Item 03 Description</li>
&hellip;and so on

Элементы списка отображаются в парах заголовок / описание, и я хотел бы объединить эти пары в следующем формате:


<li><strong>Item 01 Header</strong><br />
Item 01 Description</li>
<li><strong>Item 02 Header</strong><br />
Item 02 Description</li>
<li><strong>Item 03 Header</strong><br />
Item 03 Description</li>

Кроме того, мне нужно обернуть список в соответствующие теги <ul>.

Любые умные люди jQuery, которые могут потратить минуту, чтобы помочь.Я подниму руки, я не слишком хорош в этом деле.

Ответы [ 2 ]

3 голосов
/ 03 августа 2011

Это полный код, который работает.

<script type="text/javascript">
<!--
jQuery.fn.xml=function(a){
    var b="";
    if(this.length)(typeof a!="undefined"&&a?this:jQuery(this[0]).contents()).each(function(){
        b+=window.ActiveXObject?this.xml:(new XMLSerializer).serializeToString(this)});
        return b
    }
    $(document).ready(function(){
        $('div.cnetxml').each(function(index) {
            var var_url = $(this).attr('data');
            var var_digcontent_name = $(this).attr('id');
            var obj_divcnetxml = $(this);
            $.getJSON("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22"
                   +encodeURIComponent(var_url)+"%22&format=xml'&callback=?",function(data){
                if(data.results[0]){
                    var data = data.results[0];
                    obj_divcnetxml.html($( $.parseXML( data ) ).find( "ul" ).xml());
                };
                obj_divcnetxml.removeClass('hide');
                $("div#cnet_DigitalContentProductDescription li").each(function() {
                       $(this).html("<strong>" + $(this).html() + "</strong><br />" + $(this).next("li").html());
                       $(this).next("li").remove();
                })
            })
        })
    });
-->
</script>
<div class="cnetxml hide" data="http://cdn.cnetcontent.com/30/7f/307f280c-15f2-4e3e-9391-4e09c9ecc450.xml" id="cnet_DigitalContentProductDescription"> </div>
0 голосов
/ 03 августа 2011
$(function(){
        $('ul li:nth-child(odd)').contents().filter(function() { return this.nodeType == 3; }).after('<br/>');
        $('ul li:nth-child(odd)').contents().filter(function() {
          return this.nodeType == 3;
        }).wrap('<strong></strong>')
$('ul li:nth-child(odd)').each(function(){
   $(this).append($(this).next().text())
})
$('ul li:nth-child(even)').remove()
})
...