<?xml version="1.0" encoding="UTF-8"?>
<code>
  <code>$(document).ready(function(){
	// get the text file to be parsed
	$.get('test-data.txt', function(textData){
		// split on carriage return
		var text = textData.split('\n');
		$(text).each(function(i){
			// we want the "top" (i.e. first) fifteen terms in the file
			if(i &lt; 15)
			{
				// split the new entry on pipe ('|')
				var term = text[i].split('|');

				// create a new list item for each entry
				$('#tagcloud').append('&lt;li&gt;&lt;/li&gt;');

				// this will grab the current li and append the term
				$('li').each(function(j){
					if(i == j) $(this).text(term[0]);
				});
			}
		});
	});
});
</code>
  <comment>Using jQuery, I'm trying to parse a text file from a carriage return split, pipe split format into an unordered list.
This looks kind of ugly, and I'm not fully immersed in jQuery so I figure there's a better way.

I tried using $('li')[i].text(term[0]); but it said it's not a function, and doing $('li').text(term[0]); rewrote the text on every LI to the last term found.</comment>
  <created-at type="datetime">2009-01-23T17:10:26+00:00</created-at>
  <id type="integer">712</id>
  <language>JavaScript</language>
  <permalink>split-text-into-unordered-list</permalink>
  <refactors-count type="integer">4</refactors-count>
  <title>Split text into unordered list.</title>
  <trackback-url></trackback-url>
  <updated-at type="datetime">2009-01-26T08:19:29+00:00</updated-at>
  <user-id type="integer">1285</user-id>
  <refactors type="array">
    <refactor>
      <code>## JavaScript [jquery_javascript]
$(document).ready(function(){
  var MAX_NR_OF_LINES = 15;
  
  // get the text file to be parsed
  $.get('test-data.txt', function(textData){
    // get first n lines (no more than the maximum allowed)
    var lines = textData.split('\n').slice(0, MAX_NR_OF_LINES-1);
    $.each(lines, function(i, line){
      // split the line on pipe ('|') and take the first term
      var term = line.split('|')[0];

      // add new list item containing this term
      $('#tagcloud').append('&lt;li&gt;&lt;/li&gt;');
      $('#tagcloud li:last-child').text(term);

      // If the text in this file is safe, then you could instead use:
      // $('#tagcloud').append('&lt;li&gt;'+term+'&lt;/li&gt;');

      // Or when you have an html-escaping function
      // There doesn't seem to be one offered by jQuery
      // $('#tagcloud').append('&lt;li&gt;'+escape_html(term)+'&lt;/li&gt;');
    });
  });
});
</code>
      <code-id type="integer">712</code-id>
      <comment></comment>
      <created-at type="datetime">2009-01-23T19:53:53+00:00</created-at>
      <id type="integer">144282</id>
      <language>JavaScript</language>
      <rating type="integer">0</rating>
      <ratings-count type="integer">0</ratings-count>
      <title>On Split text into unordered list.</title>
      <user-id type="integer">1278</user-id>
      <user-name>Rene Saarsoo</user-name>
      <user-website>http://triin.net</user-website>
    </refactor>
    <refactor>
      <code>$(document).ready(function(){
	// how many results do we want?
	var resultsMax = 15;

	// get the text file to be parsed
	$.get('test-data.txt', function(textData){

		// get the first n lines &lt; lineMax
		var lines = textData.split('\n').slice(0, resultsMax);
		$.each(lines, function(i, line){
			// split the line on pipe ('|')
			// keeping it as a single term to squeeze a little more performance juice
			var term = line.split('|');

			// create a new list item for each entry
			$('#tagcloud').append('&lt;li value="'+(15-i)+'"&gt;&lt;/li&gt;');
			$('#tagcloud li:last-child').html('&lt;a href="'+term[3]+'" title="'+term[0]+'"&gt;'+term[0]+'&lt;/a&gt;'); // this is what I was looking for! Thanks.

			// start tagcloud, I can't find a "onComplete" function anywhere
			if(i == resultsMax-1) $('#tagcloud').tagcloud();
		});
	});
});
</code>
      <code-id type="integer">712</code-id>
      <comment>Awesome - thanks! I'm making this into a tagcloud, this is my (current) result: </comment>
      <created-at type="datetime">2009-01-23T20:25:47+00:00</created-at>
      <id type="integer">144284</id>
      <language>JavaScript</language>
      <rating type="integer">0</rating>
      <ratings-count type="integer">0</ratings-count>
      <title>On Split text into unordered list.</title>
      <user-id type="integer">1285</user-id>
      <user-name>keif</user-name>
      <user-website>http://ikeif.net</user-website>
    </refactor>
    <refactor>
      <code>$(document).ready(function(){
  var resultsMax = 15;

  $.get('test-data.txt', function(textData){
    var lines = textData.split('\n').slice(0, resultsMax);
    
    $.each(lines, function(i, line){
      var term = line.split('|');
      
      // I would go for some extra variables.
      // Array indexes are quite meaningless.
      var title = term[0];
      var url = term[3];

      // This way it should be easier to understand,
      // and more effective too, 
      // and avoids using the magic number 15.
      $('#tagcloud').append(
        '&lt;li value="'+(resultsMax-i)+'"&gt;' +
        '&lt;a href="'+url+'" title="'+title+'"&gt;'+title+'&lt;/a&gt;' +
        '&lt;/li&gt;');
    });
    
    // No need for any onComplete function,
    // just start it after the $.each() loop ends
    $('#tagcloud').tagcloud();
  });
});</code>
      <code-id type="integer">712</code-id>
      <comment></comment>
      <created-at type="datetime">2009-01-23T22:17:22+00:00</created-at>
      <id type="integer">144295</id>
      <language>JavaScript</language>
      <rating type="integer">5</rating>
      <ratings-count type="integer">1</ratings-count>
      <title>On Split text into unordered list.</title>
      <user-id type="integer">1278</user-id>
      <user-name>Rene Saarsoo</user-name>
      <user-website>http://triin.net</user-website>
    </refactor>
    <refactor>
      <code>$(document).ready(function(){
  var resultsMax = 15;

  $.get('test-data.txt', function(textData){
    var lines = textData.split('\n').slice(0, resultsMax);
    
    $.each(lines, function(i, line){
      var terms = line.split('|');
      
      $('#tagcloud').append(
        '&lt;li value="{index}"&gt;&lt;a href="{url}" title="{title}"&gt;{title}&lt;/a&gt;&lt;/li&gt;'.replace(/{(.+?)}/ig, function(raw, key) {
          return { 
            index : resultsMax - i, 
            url   : terms[3], 
            title : terms[0]
          }[ key ] || raw;
      }));      
    });
    
    $('#tagcloud').tagcloud();
  });
});</code>
      <code-id type="integer">712</code-id>
      <comment></comment>
      <created-at type="datetime">2009-01-26T08:19:27+00:00</created-at>
      <id type="integer">144569</id>
      <language>JavaScript</language>
      <rating type="integer">5</rating>
      <ratings-count type="integer">1</ratings-count>
      <title>On Split text into unordered list.</title>
      <user-id type="integer">856</user-id>
      <user-name>Tien Dung</user-name>
      <user-website>http://codemonkeycode.blogspot.com/</user-website>
    </refactor>
  </refactors>
</code>
