С jQuery и мне нужна помощь в получении отдельных атрибутов заголовков строк таблицы из XML-файла - PullRequest
0 голосов
/ 14 марта 2010

Я использую TableSorter jQuery для анализа этого XML-файла

    <?xml version="1.0" encoding="iso-8859-1"?>
<CATALOG>
  <CD>
    <TITLE>Title 01</TITLE>
    <ARTIST>Artist 01</ARTIST>
    <COUNTRY>Country 01</COUNTRY>
    <PRICE>10.00</PRICE>
    <YEAR>2010</YEAR>
    <INFO>Tooltip Info 01</INFO>
  </CD>
  <CD>
    <TITLE>Title 02</TITLE>
    <ARTIST>Artist 02</ARTIST>
    <COUNTRY>Country 02</COUNTRY>
    <PRICE>9.00</PRICE>
    <YEAR>2009</YEAR>
    <INFO>Tooltip Info 02</INFO>
  </CD>
  <CD>
    <TITLE>Title 03</TITLE>
    <ARTIST>Artist 03</ARTIST>
    <COUNTRY>Country 03/COUNTRY>
    <PRICE>8.00</PRICE>
    <YEAR>2008</YEAR>
    <INFO>Tooltip Info 03</INFO>
  </CD>
</CATALOG>

и с этим кодом

    <script type="text/javascript">
$(document).ready(function(){
  $.ajax({
    type: "GET",
    url: "file.xml",
    dataType: "xml",
    success: function(xml){                 
       $(xml).find("CD").each(function(){                                             
          $("#tablebody").append('<tr><td>'
            + $(this).find("TITLE").text() 
            + '</td><td>'+ $(this).find("ARTIST").text() 
            + '</td><td>'+ $(this).find("COUNTRY").text() 
            + '</td><td>'+ $(this).find("PRICE").text() 
            + '</td><td>'+ $(this).find("YEAR").text() 
            + '</td></tr>');                        
          });
       }
  });
});
</script>

Я новичок в javascript и безуспешно пытаюсь пару часов получить текст из тегов INFO / INFO в xml-файле для отображения в качестве атрибутов заголовка для каждой строки таблицы. Причина в том, что мне нужно иметь отдельные всплывающие подсказки при наведении мышки на каждую строку таблицы. Заранее большое спасибо за любую помощь или предложения!

Ответы [ 4 ]

1 голос
/ 14 марта 2010

Я бы сделал это немного иначе, чтобы исключить повторяющийся код:

var cells = ["TITLE", "ARTIST", "COUNTRY", "PRICE", "YEAR"];

...

success: function(xml) {
  $(xml).find("CD").each(function() {
    var title = $(this).children("INFO").text();
    var row = $("<tr>").attr("title", title).appendTo("#tablebody");
    for (var i=0; i<cells.length; i++) {
      var text = $(this).children(cells[i]).text();
      $("<td>").text(text).appendTo(row);
    }
  }

cells - это просто массив дочерних элементов, из которых вы хотите создать ячейки таблицы. Создание разметки так, как вы делаете, может замедлиться. Вышеуказанный метод намного быстрее. Атрибут title в строке - это то, что создает подсказку.

0 голосов
/ 05 апреля 2010

biterscript для получения всех TITLES (или значений тегов одного типа тегов).

# Script XMLTags.txt
var str document, xml, tagtype, tagvalue, searchRE
set $searchRE = "^<"+$tagtype+"&</"+$tagtype+"^"
cat $document > $xml
while ( { sen -r -c $searchRE $xml } > 0 )
do
    stex -r -c $searchRE $xml > $tagvalue
    stex "^>^]" $tagvalue > null
    stex "]^<^" $tagvalue
done

Вызовите скрипт как этот из вызова скрипта.

script XMLTags.txt document("http://www.xxx.yyy/file.xml") tagtype("TITLE")

Получит все названия.

script XMLTags.txt document("http://www.xxx.yyy/file.xml") tagtype("ARTIST")

Получат все художники.

и т.д.

0 голосов
/ 14 марта 2010

Для лучшей производительности (если выход очень большой), используйте эту функцию:

success: function(xml){
  var content = '';
  $(xml).find("CD").each(function(){
    content += '<tr title="' + $(this).find("INFO").text() + '"><td>' +
    $(this).find("TITLE").text() + '</td><td>' +
    $(this).find("ARTIST").text() + '</td><td>' +
    $(this).find("COUNTRY").text() + '</td><td>' +
    $(this).find("PRICE").text() + '</td><td>' + 
    $(this).find("YEAR").text() + '</td></tr>';
  });
  $("#tablebody").append(content);
}

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

0 голосов
/ 14 марта 2010
$("#tablebody").append("<tr title='" + $(this).find("INFO").text() + "'><td>"
            + $(this).find("TITLE").text() 
            + '</td><td>'+ $(this).find("ARTIST").text() 
            + '</td><td>'+ $(this).find("COUNTRY").text() 
            + '</td><td>'+ $(this).find("PRICE").text() 
            + '</td><td>'+ $(this).find("YEAR").text() 
            + '</td></tr>');                        
          });
...