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>
Yes, it can.
In jQuery 1.4.2, you can write
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:eqselector 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: