Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can this jQuery code snippet be shortened?

Tags:

I have just started using jQuery and although following code gets the job done, I have a feeling that it can be shortened.

var accountAddress = $(document.createElement("input")).addClass("readOnly")         .attr("contentEditable", "false").attr("id", "d_accountAddress");  $("#customerid_c").next().next().next().append(accountAddress); 

If it is not clear - what I'm doing is creating new input tag, assigning class and making it read-only, then positioning new input two TD's to the right of some known text.

Update:

This is simplified HTML that I'm modifying. The place where I add content is marked with ##1## and ##2##.

<TD id=customerid_c>     <LABEL for=customerid>Customer</LABEL> </TD> <TD id=customerid_d></TD> <TD class=ms-crm-Field-Normal>     <LABEL>##1##</LABEL> </TD> <TD>##2##</TD> 
like image 417
David Vidmar Avatar asked Mar 22 '10 12:03

David Vidmar


1 Answers

Yes, it can.

$('#customerid_c').nextAll().eq(2)     .append('<input class="readOnly" id="d_accountAddress" />'); 

In jQuery 1.4.2, you can write

$('#customerid_c~:eq(2)')     .append('<input class="readOnly" id="d_accountAddress" />'); 

This selector, which does not work correctly in earlier versions of jQuery, uses the Next Siblings Selector (~) to select all sibling elements following #customerid_c, then uses the :eq selector to select the third (zero-based) element matched by the other selector.

jQuery has a large variety of selectors that can probably replace the indexed sibling. If you show us your HTML, we can find you one.

Other notes:

You can set multiple attributes in one call:

$(something).attr({ id: 'd_accountAddress', type: 'text' }); 
like image 69
SLaks Avatar answered Sep 20 '22 20:09

SLaks