I really appreciate your help. All of the mistakes which you figured out is
just a typo. I've it working but quite slow thats the reason I thought of
enhancing it.
Michael Geary wrote:
>
>
> It would be helpful to have a complete example of your actual HTML and
> JavaScript code. The code you listed in your message is not working code:
>
> 1) The selector $("#example tbody tr td.name") will not select anything,
> because your <td>'s have no class attribute.
>
> 2) $(this).html().indexOf("val") shouldn't have the quotes around val.
>
> 3) Calling .show() and .hide() on the TD doesn't work in all browsers. I
> had
> better luck using them on the TR.
>
> It's fairly easy to make this code 20 times faster by writing straight DOM
> code, but the code is more dependent on on the actual DOM structure.
>
> Just for fun, I posted an example with about 1250 rows in the table:
>
> http://mg.to/test/potluri/rower.html
>
> Type some text into the Slow box and the Fast box to compare the timings.
>
> The JavaScript code is in:
>
> http://mg.to/test/potluri/rower.js
>
> The slow() function in rower.js is basically the code you posted. The
> fast()
> function is the improved version:
>
> function fast() {
> var rows = [];
> var tbody = $('#example2 tbody')[0], trows = tbody.rows;
>
> for( var i = 0, n = trows.length; i < n; ++i ) {
> var row = trows[i];
> var col = row.firstChild;
> rows.push({ row:row, col:col, style:row.style, visible:true });
> }
>
> var nRows = rows.length;
>
> var $text = $('#textId2'), text = $text[0];
>
> $text.keyup( function() {
> var time = (new Date).getTime();
> var val = text.value;
>
> for( var i = 0; i < nRows; ++i ) {
> var row = rows[i], col = row.col;
> if( row.col.innerHTML.indexOf(val) != -1 ) {
> if( ! row.visible ) {
> row.visible = true;
> row.style.display = '';
> }
> }
> else {
> if( row.visible ) {
> row.visible = false;
> row.style.display = 'none';
> }
> }
> }
> $('#time2').html(
> ( ( (new Date).getTime() - time ) / 1000 ) + ' seconds' );
> });
> }
>
> As you can see, there is no jQuery code in the inner loop in the keyup
> function. Some of the tricks that make it go fast:
>
> 1) Prebuilding the rows table with references to each row, column, style
> attribute, and a visible boolean. (This takes a little extra time at
> startup
> but pays for itself on each keystroke.)
>
> 2) Plain "for" loops instead of .each().
>
> 3) Saving references to jQuery objects instead of repeated $(...) calls.
>
> 4) Testing the row.visible boolean instead of hitting the DOM to test the
> display attribute.
>
> The code assumes that the TD containing the name is the first TD in each
> row. If that's incorrect, you'd need to change the "var col =
> row.firstChild;" statement.
>
> -Mike
>
>> From: Potluri
>>
>> Hi everyone,
>> Thanks for everyone who responded for my previous queries.
>> Here is an assignment which I feel challenging for our for
>> our jquery guys.
>> for table with 500 rows. I don't want to use any plugin for this.
>>
>> Well the task is when we type some thing in a text box it has
>> to show only
>> those rows which has the value typed in textbox
>> in one coloumn.
>>
>> For ex.
>> consider a table with id "example"
>> <table id="example">
>> <tbody>
>> <tr><td> blah vijay</td></tr>
>> <tr><td> blah victor</td></tr>
>> <tr><td> blah avinash</td></tr>
>> <tr><td> blah steven/td></tr>
>> <tr><td> blah russell</td></tr>
>> <tr><td> blah suresh</td></tr>
>>
>> </tbody>
>> </table>
>>
>> So, when I type in "vi" in text box only rows that has
>> vijay,victor,avinash
>> should be shown, remaining should be hidden since all of them
>> has Vi in
>> their names.
>>
>> I did it in this way,
>> let id of text box be textId
>> $("#textId").keyup(function(){
>> var val=$("#textId").val(); // which gives value typed in textbox
>> $("#example tbody tr td.name").each(
>> function()
>> {
>> if( $(this).html().indexOf("val") == -1)
>> {
>> $(this).hide();
>> }
>> else $(this).show();
>> });
>> });
>>
>>
>> This works fine but it's taking 2 secs to do for table with
>> 500 rows. Is
>> there any better way to do this.
>
>
>
--
View this message in context:
http://www.nabble.com/hide-table-rows-when-we-type-in-text-box-tf4294139s15494.html#a12228175
Sent from the JQuery mailing list archive at Nabble.com.