2014-11-03 7 views
-1

У меня есть div-контейнер с множеством входов. Мне нужно скопировать данные с этих входов в другой контейнер, как первый. Разница - новый контейнер имеет разные имена и идентификаторы для этих входов, поэтому простой .clone() не подходит, я думаю.Копировать/Вставить содержимое div в другой div

Необходимо скопировать и пропустить только что введенные значения.

Есть ли какое-либо другое решение, которое затем получает значение от каждого входа и мимо него до аналогичного ввода в другой контейнер ручной?

Благодаря

Пример DIV:

<div class="listing-space-item-field-row with-label"> 
     <input id="Spaces_0__SpaceId" name="Spaces[0].SpaceId" value="355637" type="hidden"> 
     <input class="def-text-input space-name" id="Spaces_0__Name" name="Spaces[0].Name" value="debora" type="text"> 
     <input class="def-text-input space-size" id="Spaces_0__Size" name="Spaces[0].Size" value="3331" type="text"> 
     // some other inputs 
    </div> 
+2

Как элементы формы сопоставляются с другим элементом? – epascarello

+0

@epascarello, у меня есть что-то вроде шаблона редактора (Asp.NET MVC), который отображает форму для одного контейнера. Имена похожи на это 'Spaces [0] .SpaceName'. Когда я хочу добавить новое пространство, я нажимаю кнопку «Добавить». И чтобы упростить (как сказал costumer), необходимо заполнить новый контейнер для пространства теми же значениями, что и в первом контейнере. Все поля имеют похожие классы, такие как 'space-name' или' space-prise' – demo

+1

Можете ли вы добавить атрибут data, чтобы упростить его? – epascarello

ответ

1

Используя атрибут data, вам не нужно разбирать общий элемент из атрибута имени класса. Вам придется пройти через элементы и скрыть тот, который ему соответствует.

$("button").on("click", function() { 
 
    
 
    var c2 = $("#c2"); 
 
    $("#c1 :input").each(function() { 
 
     var elem = $(this); 
 
     var dataItem = elem.data("item"); 
 
     c2.find('[data-item="' + dataItem + '"]').val(elem.val()); 
 
    }); 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div id="c1"> 
 
    <select data-item="sel"> 
 
     <option>asdf 1</option> 
 
     <option>asdf 2</option> 
 
     <option>asdf 3</option> 
 
    </select> 
 
    <input type="text" value="a" data-item="one" /> 
 
    <input type="text" value="b" data-item="two" /> 
 
    <input type="text" value="c" data-item="three" /> 
 
</div> 
 
<button>copy</button> 
 
<div id="c2"> 
 
    <select data-item="sel"> 
 
     <option>asdf 1</option> 
 
     <option>asdf 2</option> 
 
     <option>asdf 3</option> 
 
    </select> 
 
    <input type="text" value="" data-item="one" /> 
 
    <input type="text" value="" data-item="two" /> 
 
    <input type="text" value="" data-item="three" /> 
 
</div>

Если классы гарантированы и в том же точном порядке, вы можете избежать атрибута данных и просто посмотреть на то же имя класса.

var elem = $(this); 
var dataItem = this.className 
c2.find('[class="' + dataItem + '"]').val(elem.val()); 
+0

О, это то, что вы имеете в виду. ОК, спасибо – demo

+0

Один вопрос: в '# c1' у меня есть' select'. Когда я загружаю страницу и нажимаю на 'copy' значение из' # c1 select', скопированного в '# c2 select' fine, но когда я сначала меняю значение в' # c1 select', а затем на 'copy', значение' select 'в' # c2' пуст. Можете ли вы объяснить мне, почему? – demo

+0

Я просто добавил выбор и не видел эту проблему. Это один выбор или множественный выбор. – epascarello

0

Если вы хотите скопировать i1 содержание в i2, попробуйте:

<input id="i1" type="text"> 
<input id="i2" type="text"> 
<input type="button" onclick="copy()"> 
<script> 
    function copy() { 
     document.getElementById("i2").value = document.getElementById("i1").value; 
    } 
</script> 

Вы можете использовать это в качестве основы, если вы хотите скопируйте несколько входов.

+0

Я знаю об этом варианте решения, но я ищу самый простой. спасибо – demo

+0

Это был не я. – demo

Смежные вопросы