2012-02-19 3 views
0

Я искал веки и, похоже, не могу найти ответ на то, что я думаю, это довольно простой вопрос. Я использовал .clone(), чтобы сделать копию li, содержащую несколько полей формы, а затем я вставляю ее в начале формы. Это прекрасно работает.jquery найти и заменить строку внутри переменной

То, что я пытаюсь сделать, это найти и заменить все экземпляры ROWID с переменной i

<ul class="form"> 
<li class="hide"> 
    <ol class="form"> 
     <li><label for="cat_id_ROWID">Category:</label> 
      <select id="cat_id_ROWID" name="cat_id[]"> 
       <option>...options...</option> 
      </select> 
     </li> 
     <li> 
      <label for="value_ROWID">Value:</label> 
      <input id="value_ROWID" name="value[]"> 
     </li> 
     <li> 
      <label for="description_ROWID">Description:</label> 
      <textarea id="description_ROWID" name="description[]"></textarea> 
     </li> 
    </ol> 
</li> 
</ul> 

Любой мой JQuery является:

var newitem = $('li.hide').eq(0).clone(); 
newitem.removeClass('hide').addClass('row'); 
$(newitem).insertBefore('ul.form li:first'); 

Я пытаюсь сделать что-то вроде $(newitem).replace('ROWID',i); но он не работает. Любая помощь будет оценена! Благодарю.

ответ

3

Ваш newitem переменная является объект JQuery, а не строка, поэтому простой .replace не будет работать. Вам нужно будет выбрать нужные элементы в пределах newitem и изменить атрибуты (которые - строк) индивидуально.

var $newitem = $('li.hide').eq(0).clone(); 
$('[for$="ROWID"]', $newitem).each(function() { 
    $(this).attr('for', $(this).attr('for').replace('ROWID', i)); 
}); 
$('[id$="ROWID"]', $newitem).each(function() { 
    $(this).attr('id', $(this).attr('id').replace('ROWID', i)); 
}); 
$newitem.removeClass('hide').addClass('row'); 
$newitem.insertBefore('ul.form li:first'); 
2

новый элемент является li, а не атрибутом. Попробуйте коснуться, как это:

newitem.html(newitem.html().replace("ROWID",i)); 
+1

Вы также можете редактировать атрибуты только с помощью функции attr() :) почти так же! – Neysor

+0

спасибо за ваш ответ, к сожалению, это не сработало для меня. Однако решение @nachito. Можно ли сгладить объект jQuery, чтобы он был просто html/text, а не серией объектов? Это то, что вы пытаетесь сделать с помощью .html() '? – leejmurphy

+1

, если вы используете .html(), вы получаете все в своем контейнере как html или используете текст .text() как текст. то вы можете использовать любые манипуляции с строками, которые вы хотите. то вы можете вставить его снова. Просто посмотрите http://api.jquery.com/html/ и http://api.jquery.com/text/ – Neysor