2012-06-08 3 views
3

У меня есть html-страница, где у меня есть несколько текстовых полей. Каждый набор текстовых полей принадлежит внутри DIV. Я хочу изменить имя определенных текстовых полей. Но, возможно, это становится более ясным, когда вы посмотрите на пример HTML:переименовать часть текстового поля в определенный div

http://jsfiddle.net/dg2Bz/

Как вы можете видеть, что первый DIV имеет 3 текстовых элементов с этим, как имя:

test[something][xxxx] 

Но другие "пустышки" дивы есть текстовые поля с номером:

<input name="test[100][name]" value="display" /> 
<input name="test[100][option1]" value="op1" /> 
<input name="test[100][option2]" value="op2" /> 

и

<input name="test[101][name]" value="borders" /> 
<input name="test[101][option1]" value="op1" /> 
<input name="test[101][option2]" value="op2" /> 

Все эти поля принадлежат к div. То, что я хочу сделать, это изменить номер части имени и заменить его значением первого текстового поля, которое имеет «имя» в атрибуте «имя». Так что это будет так:

<input name="test[display][name]" value="display" /> 
<input name="test[display][option1]" value="op1" /> 
<input name="test[display][option2]" value="op2" /> 

и

<input name="test[borders][name]" value="borders" /> 
<input name="test[borders][option1]" value="op1" /> 
<input name="test[borders][option2]" value="op2" /> 

Я не знаю, как я мог на самом деле сделать это с помощью JQuery. Я уверен, что это возможно, и это, вероятно, связано с некоторым регулярным выражением. Просто не могу получить мою голову вокруг него ...

ответ

3

Это один из возможных решений:

$(".dummy :input[name^=test]")​​​​​​​​​​​​​.attr("name", ​​function(i, value) { 
    var name = $(this).parent().children(":first").val(); 
    return value.replace(/\[\d{3}\]/, "[" + name + "]"); 
});​ 

DEMO:http://jsfiddle.net/dg2Bz/1/

+0

Спасибо, отлично работает, и код намного короче, чем я думал, что это будет :) – Vivendi

+0

@Vivendi Добро пожаловать :) – VisioN

2

Попробуйте это:

$(".dummy > input[name*=name]").change(function(){ 
    var newName = this.value; 
    $.each($(this).parent(".dummy").find("input"),function(){ 
     $(this).attr("name",function(i,value){ 
      return value.replace(/\[\d{3}\]/, "[" + newName + "]"); 
     }); 
    }); 

});