Live test: http://jsfiddle.net/E7F7D/33/
<table id='dataHere' border='1'> <thead> <!-- ID presence on HTML is optional --> <!--<th style='visibility: collapse'>Id</th>--> <th>Lastname</th><th>Firstname</th><th>Asset</th><th>Actions</th> </thead> <tbody> </tbody> </table> <hr/> <input type="button" id="viaModel" value="test via model"/> <input type="button" id="viaDom" value="test via DOM"/> <div id="debugLog"> </div> <script> var people = [ { Id: 1, Lastname: 'Lennon', Firstname: 'John', Asset: 40090.1296 }, { Id: 2, Lastname: 'McCartney', Firstname: 'Paul', Asset: 38000.34 }, { Id: 3, Lastname: 'Harrison', Firstname: 'George', Asset: 37000.56 }, { Id: 4, Lastname: 'Starr', Firstname: 'Ringo', Asset: 40000.78 }, { Id: 5, Lastname: 'Buendia', Firstname: 'Ely', Asset: 40000.93 }, { Id: 6, Lastname: 'Marasigan', Firstname: 'Raymund', Asset: 39000.12 }, { Id: 7, Lastname: 'Zabala', Firstname: 'Buddy', Asset: 39000.13 }, { Id: 8, Lastname: 'Adoro', Firstname: 'Marcus', Asset: 39000.14344 } ]; var tbl = $('#dataHere'); $('#viaModel').click(function() { var dl = $('#debugLog'); dl.html('Model-based approach. Data are in their pristine state'); $.each(people, function() { var person = this; dl.append(person.Id + '-->' + person.Lastname + ', ' + person.Firstname + ': ' + this.Asset + '<p/>'); }); }); $('#viaDom').click(function() { try { var dl = $('#debugLog'); var tbl = $('#dataHere'); dl.html('Using DOM approach for stashing and extracting data, the Id won\'t be available unless we stash it on HTML'); var trs = $('tbody > tr', tbl); $.each(trs, function() { var tr = this; var tds = $('td', tr); // Alas! ID won't be available if you didn't put it in td tag or whatnot. // If we use DOM approach for stashing our data, // we have to stash ID on the HTML itself, // this is called Smart UI approach, this is abhored, // as the code is tightly coupled to UI/presentation layer. var tdLastname = $(tds[0]); var tdFirstname = $(tds[1]); var tdAsset = $(tds[2]); var lastname = tdLastname.text(); var firstname = tdFirstname.text(); // another problem with Smart UI approach is the data gets mangled var asset = tdAsset.text().replace('Php ','').replace(',',''); dl.append(lastname + ', '+ firstname + ': ' + asset); }) dl.append('And data gets mangled and truncated too. Check the rounding-offs'); } catch(e) { alert(e); } }); $.each(people, function() { var person = this; var trPerson = $('<tr/>'); // optional // var tdId = $('<td/>').css('visibility','collapse'); var tdLastname = $('<td/>'); var tdFirstname = $('<td/>'); var tdAsset = $('<td/>'); var tdActions = $('<td/>'); var aEditAction = $('<a/>').prop('href','#').text('Edit'); var aDeleteAction = $('<a/>').prop('href','#').text('Delete'); // optional // tdId.text(this.Id); tdLastname.text(this.Lastname); tdFirstname.text(this.Firstname); tdAsset.text(formatMoney(this.Asset, 2, 'Php ', ',','.')); aEditAction.click(function() { // alert('Will edit ' + person.Id + ' ' + person.Lastname); var ln = prompt('Enter value', person.Lastname); person.Lastname = ln == null ? person.Lastname : ln; tdLastname.text(person.Lastname); }); aDeleteAction.click(function() { if (confirm('Will delete ' + person.Id + ' ' + person.Lastname)) { people.splice(people.indexOf(person),1); trPerson.remove(); } }); trPerson // .append(tdId) // optional .append(tdLastname).append(tdFirstname) .append(tdAsset).append(tdActions); tdActions.append(aEditAction).append('|').append(aDeleteAction); tbl.append(trPerson); }); // alert(8); // alert(formatMoney(92334.55, 2,'Php ',',','.')); // http://www.josscrowcroft.com/2011/code/format-unformat-money-currency-javascript/ function formatMoney(number, places, symbol, thousand, decimal) { number = number || 0; places = !isNaN(places = Math.abs(places)) ? places : 2; symbol = symbol !== undefined ? symbol : "$"; thousand = thousand || ","; decimal = decimal || "."; var negative = number < 0 ? "-" : "", i = parseInt(number = Math.abs(+number || 0).toFixed(places), 10) + "", j = (j = i.length) > 3 ? j % 3 : 0; return symbol + negative + (j ? i.substr(0, j) + thousand : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousand) + (places ? decimal + Math.abs(number - i).toFixed(places).slice(2) : ""); } </script>
No comments:
Post a Comment