Как получить весь текст, включая теги, из XML-файла с помощью jQuery - PullRequest
0 голосов
/ 09 сентября 2010

У меня есть XML-файл, например:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<legends>
<legend>
<number>1</number>
<legendString><ul><li>1.across:a system of rules of conduct or method of practice</li><li>1.down:a disagreement or argument about something important</li><li>2.down:any broad thin surface</li><li>3.across:the passage of  pedestrians or vehicles </li></ul></legendString>
</legend>
......
<legends>

Как я могу взять весь текст, включая теги, используя jQuery. Строка

<ul><li>1.across:a system of rules of conduct or method of practice</li><li>1.down:a disagreement or argument about something important</li><li>2.down:any broad thin surface</li><li>3.across:the passage of  pedestrians or vehicles </li></ul>

должно быть передано, если я сделаю вызов функции. Если я позвоню:

var legendStr = $(this).find("legendString").text();

теги не будут присутствовать в legendStr.

Как я могу продолжить.

Это скрипт jQuery:

var randomnumber=Math.floor(Math.random()*233);
    $.get("legends.xml",{},function(xml){  



       $(xml).find("legend").each(function(){   


                if(randomnumber == $(this).find("number").text())
                {
              var c = "legendString";

              var legendStr = $(this).find(c).html();         


              $("#sidebar > ul").html(legendStr);
                }



       });
       },"xml");

Ответы [ 3 ]

1 голос
/ 09 сентября 2010

Вы хотите $ (this) .find ("legendString"). Html ()

Я подробнее рассмотрел поддержку jQuery для XML..html() не поддерживает XML-документ.Итак, вам нужно либо использовать методы обхода и / или XML DOM .

Так, например, вы можете выполнить обход в глубину, пока не найдете текстовый узел (т.е. nodeType == 3), и вы можете использовать nodeName (например, <ul>) и .text () , чтобы получить имя тега и текст.

0 голосов
/ 09 сентября 2010

Я не думаю, что нужная вам функция находится в готовом jQuery.Но вы можете написать свой собственный.Вот отправная точка для вас:

jQuery.extend(jQuery.fn, {
outerHtml: function(tagName) {
    var matches = this.find(tagName);
    var result = '';
    for (var i=0; i<matches.length; i++) {
        var el = matches[i];
        result += '<' + tagName;

        for (var i=0; i<el.attributes.length; i++) {
            result += ' ';
            result += el.attributes[i].name;
            result += "='";
            result += el.attributes[i].value;
            result += "'";
        }
        if (el.innerHTML == null) { result += '/>'; }
        else { 
        result += '>';
        result += el.innerHTML;
        result += '</'
        result += tagName;
        result += '>';
    }
    return result;
}

}});

Таким образом, вы сможете сделать

var legendString = $(this).outerHtml('legendString');
0 голосов
/ 09 сентября 2010

Попробуйте использовать метод .html() для сохранения тегов:

var legendStr = $(this).find('legendString').html();

Также обратите внимание, что .find('legendString') будет искать тег с именем legendString, который, вероятно, не является тем, что вы ищете. Возможно, вам нужен селектор :contains().

...