Я только что начал использовать jQuery и хотя следование коду сделало задание, у меня есть чувство, что это может быть сокращено.
var accountAddress = $(document.createElement("input")).addClass("readOnly")
.attr("contentEditable", "false").attr("id", "d_accountAddress");
$("#customerid_c").next().next().next().append(accountAddress);
Если не ясно - что я делаю, создает новый входной тег, присваивая класс и делая это только для чтения, то, располагая новый вход два TD's направо от некоторого известного текста.
Обновление:
Это - упрощенный HTML, который я изменяю. Место, где я добавляю содержание, отмечено с ##1## и ##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>
Да, можно.
$('#customerid_c').nextAll().eq(2)
.append('<input class="readOnly" id="d_accountAddress" />');
В jQuery 1.4.2 можно написать
$('#customerid_c~:eq(2)')
.append('<input class="readOnly" id="d_accountAddress" />');
Этот селектор, который некорректно работает в более ранних версиях jQuery, использует Next Siblings Selector (~
) для выбора всех сиблинговых элементов, следующих за #customerid_c
, затем использует :eq
selector для выбора третьего (основанного на нуле) элемента, сопоставленного с другим селектором.
jQuery имеет большое разнообразие селекторов, которые, вероятно, могут заменить индексированный брат или сестра. Если вы покажете нам свой HTML, мы сможем подобрать вам такой.
Вы можете установить несколько атрибутов в одном вызове:
$(something).attr({ id: 'd_accountAddress', type: 'text' });