JQuery :: Large Table On The Fly And Add It To The Dom Using Html(val)
May 26, 2009
I am constructing a large table on the fly and add it to the dom using html(val). It takes about 6 seconds. I am wondering if there's any practice that would speed up this process?
I'm requesting a very large JSON dataset for a table via AJAX and I'm building it on the fly with JQuery. What would be the most efficient way to build it?
'm coming from the Java/Flex world and trying to get my mind around jQuery/HTML5 to evaluate how you would build a large scale application using them. One issue that I can't quite grasp is how to deal with HTML element IDs. My understanding is that jQuery allows you to manipulate HTML elements by referencing them by ID (there are other ways but those seem to require grabbing a list of elements and sorting through them to find the right one) In a large application with namespaced code how do you deal with dynamically created elements and the IDs the elements may contain?
For example, lets say you have a dashboard app that can contain a number of reports, each report is basically a div with the report content (a chart or table) and some associated views that can edit the report's data model. How can I assure that IDs for the report's subcomponents don't collide with IDs elsewhere in the application? I can envision some programmer working on a large project in a team naming a custom widget 'MyWidget' and then some other programmer naming their widget 'MyWidget' effectively causing two 'MyWidget' IDs to be assigned to different elements.
In the OOP world this isn't an issue because programmer one's widget is really something like MyForm.MyDiv.MyWidget and programmer two's widget is MyForm.MyOtherDiv.MyWidget allowing them to have unique names.
This could just be a fundamental misunderstanding of how things work in HTML but from what I've done every ID assignment is basically a global variable.
I'm using the .html() function to update information in a div whenever a button is clicked, like this:
$("#myPic").click(function() { $("#myDiv").html("//new content for div goes here
However, for some of these new sections, the html is QUITE lengthy. can i store it on a separate file in the same directory and somehow import it?? Is there a better way?
I've been using jquery for some time, and was very excited about the improvements in jquery 1.4 I have found however, that in one particular instance, jquery 1.4 seems to be performing slower than 1.3x, to the point that it has forced me to downgrade the script. I use jquery heavily throughout my web application; in this particular case, when a very large block of html consisting of a bunch of <tr>s is .appended (or .htmled, tried both) to a table, jquery 1.4 in firefox will give the "unresponsive script" error, prompting the user to stop, debug, or continue. The same block of html works perfectly fine in jquery 1.32 (and quite fast too). I haven't had time to do too much experimentation, as this is in a production environment, and thus downgrading was necessary as it was breaking the page, but I would love to figure out why this is happening so that I may optimize the code sometime in the near future. Have the improvements to .html resulted in code that causes higher cpu usage, or that would have a much higher overhead on longer strings? I've commented much of the code around the call, so that it pretty much consists of an ajax call that returns a chunk of html, which is inserted to a table (that I first empty). I thought it might be something with event bindings that occur after the insertion, but removal of these event bindings does not resolve the unresponsive script error. It seems the .html or .append is doing it. Note that this code, as is, works perfectly in jquery 1.3, even with event bindings, etc.
Does anyone have any ideas? My next step was going to be to try returning the entire table including the <table> tags, and doing a replace instead of an append, but if anyone has other suggestions to try, please let me know. Also, just as an aside, what do you guys consider the 'best practice' to be when returning dynamic data for a table (server side sorting, filtering etc from a db) ? Do you return just the data in json, and repeatedly clone a row element, replacing the values in each row (thus decreasing the size of the ajax call, but increasing the client side processing), or return the full html, and replace the innerHTML of the table?
My code that centers html elements fails when the html element is large. For example, I have a list of 443 items, which I break into 3 columns within a div. Therefore there are 148 lines in the div. When I use the code below to center the div, the top part of the div is beyond the top of the window screen.
function centerPopup(){ // Get data for centering var windowWidth = document.documentElement.clientWidth; var windowHeight = document.documentElement.clientHeight; var popupHeight = $(".popupArea").height(); var popupWidth = $(".popupArea").width(); //centering $(".popupArea").css({ "position": "absolute", "top": Math.floor(windowHeight/2)-Math.floor(popupHeight/2), "left": Math.floor(windowWidth/2)-Math.floor(popupWidth/2) }); //only need force for IE6 $(".popupBackground").css({ "height": windowHeight }); }
I have a dynamic HTML table which gets populated by coldfusion and displayed in the page, I have a column called performace which holds numeric values. I need to select the top 3 best performace value in the column and then highlight the entire row in different colours (top 3 values for performance). Can any one help me in doing it?My server can run only Javascript and coldfusion, No Ajax/PHP.I need a complete set of code which such that I will add the script and it performs the calculating and highlighting part.
I have written some JavaScript that I can use to remove a table row from a table. If I have the table:
[Code]...
I also have JavaScript that will add a row to the same table. I've found that if I add a bunch of rows, when I delete one, there is a small amount of whitespace added between the permanent row and the others. It seems like while the row is removed, some remnants of it remain. Is there a way to get rid of it completely?
I have a question about iterating through an HTML table with jQuery.
I have a table that I populate with AJAX and only stores the data. However I would like to now stylize each cell according to the data that is inside and its position in the table.
I have come up with something like this to iterate through each row and cell
Code:
I am wondering now, how do I reference the very first column once I am inside the inner .each() loop? The very first column of this row contains information on how to stylize this cell.
I am trying to dynamically load html into a table, i.e add new rows in the table if a user clicks on an element in the table. Calling code :
<TD><a href="#" onClick="javascript:AddElement('someVal', 'someOtherval');return false;">Click ME</a></TD> No problems there, I have a function : function AddElement(someval, i) {
The application I'm working on dynamically generates a HTML table like the one below. Having identified that I need to add an opening <tbody> before the first TR that contains the word "Diagnosis", opening + closing TBODY to all other TRs containing the word "Diagnosis" & Closing </TBODY> after the last closing TR?
I have a <Html> Table with so Many <li> elements. SO when I export the html table to excel the cells are incrementing when ever it encounters <li> I want them to increment only when they encounter <th><td> Here is my jquery
I have been using JQuery in the past 6 months and I really got in love with it!Finally,I've come to an issue that (probably) have better solution than the one Im trying to do with.I have multiple tables in a HTML [code]all of these tables are some kind of gridviews filled with data using JSon and JQuery.The problem is:Before filling with data, only this part in the DOM is created <table id="myTableId"> <tbody> !so, before going forward with filling the table with data and creating <tr>'s and <td>'s, I would like to find the current (not filled one) table ID.The algorithm would be:
1. <table id="mytableId"> is generated 2. right after #1, find table ID. 3. Depending of the table ID, generated data accordingly. (Continue with creating tr's and td's)
I have tried using closest('table'), also using find(), parent(), parents() and some other methods with which I've been working previously, but still no success.I can find the table by uing var tId = $(TABLE['id*='myTable']").attr('id');, but this finds all tables with 'myTable' and I want to find only the one that is created at that moment and waits for filling with data.
How can I use jquery to cycle through all the table rows I have in a table, and hide the rows that contain a specific HTML value that I pass to jquery?For instance, I have a table full of students, and courses each student is taking. If I want to hide all the rows where the course is Chemistry (regardless of student), how would I do that?I already have captured the HTML value, what I mainly need help with is how to tell jquery to hide ALL of the rows with that HTML value, rather than just the row I click on.
I have a costestimatorslider using jquery ui slider as:
$(function() {
As you can see I can add the value from the slider ui.value without any problem.Now I would like to be able to ADD or Extract the$('.cost') value to other value as Total(total=parseInt($('#total').html());.) which is Sum of some other calculations stored in a HTML table cell in the page as:
I tried to do it by this way butFirstof all it doubled the value which makesense and it's wrong!, besides itcouldn'textract the cost from the total.
On the time sheet page i have created a years worth of entries in the database for a user so that they may create entries ahead of time(for holidays etc.).
My problem is that when i load the page, i display the current month for that user and it displays:
Date Month Day TimeInMorning TimeIn Evening etc..
What i would like is that a user may update any field and click on a save button which will update the field(s) that they have changed. I ahve attempted in javascript to do this but i am failing.
My program builds several tables using inner HTML. All the tables are displayed only when the program terminates. How can I make it display one table at a time and then wait for a click before displaying the next table?