Создание дубликата элемента
всем привет)
прошу помочь с таким вопросом: как создать точную копию элемента, со всеми его атрибутами и пр.? к примеру есть элемент <input name="name" type="text" placeholder="" title="какой-то текст" id="id" required> нужно создать точную копию элемента, но без прибегания каждый раз к createElement и его setAttribute, ибо слишком много кода. заранее спасибо) |
cloneNode() |
о, спасибо большое)
и ещё один вопрос. как клонировать элемент, но указать, что один из атрибутов будет иметь иное значение? |
Склонировать, и указать новое значение атрибута.
|
Ну так просто укажите клонированному элементу своё значение атрибута.
var elem = document.getElementById('id'), newElem = elem.clone; newElem.name = 'new-name'; |
danik.js, блин, опередил. :)
|
спасибо вам, ребята) помогаете чайнику)
кстати, а можно ли указать не конкретно клонируемому элементу, а его потомкам? при клонировании целого дерева элементов |
.cloneNode(true)клонирует и детей. А дальше - склонированая нода - точно такая же как и любая другая, и методы работы с ней те же. |
не совсем понял(
к примеру, клонируется форма: <form id="id1"> <select name="name1"> <option value="1">вариант 1</option> <option value="2">вариант 2</option> <option value="3">вариант 3</option> </select> </form> клонируется всё, это понятно. я знаю теперь, как задать другой айдишник клону формы. но возник вопрос: как достучаться, к примеру, до селекта и изменить нейм, или даже до опшина? надеюсь, правильно объяснил |
И на кой хер тогда делать клон если в итоге ты все переиначиваешь?
Просто создай форму, в ней селект и нафигачь опшнов. |
Sivik,
:blink: <!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> </head> <body> <form id="id1"> <select name="name1"> <option value="1">вариант 1</option> <option value="2">вариант 2</option> <option value="3">вариант 3</option> </select> </form> <script> var clone = document.getElementById('id1').cloneNode(true), options= clone.getElementsByTagName('select')[0].options; options[0].text = "НЕ вариант"; document.body.appendChild(clone) </script> </body> </html> |
danik.js, нет, не всё) дело в том, что атрибутов может быть намного больше, которые надо клонировать. а, например, name нужен другой.
к примеру для отправки данных по php. если у старого селекта и его клона будет одинаковый нейм, а человек выберет разные опшны, то очевидно, что опшн второго селекта будет игнорирован. отправится лишь значение опшна первого селекта. |
var clone = form.cloneNode(true); clone.firstElementChild.name = 'new-name'; //или clone.getElementsByTagName('select')[0].name = 'new-name'; //и т.д. |
Цитата:
А если в одной, то почему бы не назвать name="name[]", и на сервак (по крайней мере в PHP и вроде бы в ASP) придет массив значений? |
рони, Aetae,
да да) именно так) |
Цитата:
фактически, JS начал разбирать чуть больше месяца назад. до этого лишь знал операторы if, else. и всё. |
Цитата:
|
Цитата:
да я вообще чайник)) из php собирал только отправку формы на почтовый адрес. ну и внешний вид окна результата. типа "письмо отправлено". так что я нулейший нуль и вопроса даже не понял)) хочу сначала довести знания в js до приемлемого уровня, а потом за php браться. а то чтоб не было каши в голове от всего сразу :) |
Да блин. Просто вместо:
$name1 = $_POST['name1']; $name2 = $_POST['name2']; напиши: list($name1, $name2) = $_POST['name']; А в html вместо name="name1" name="name2" просто пиши name="name[]" |
Цитата:
оу, спасибо) сейчас же опробую) |
что-то никак не догоню.
вот пример кода: <?php $result = mail ( "adress@email.ru", "Заголовок письма", "Имя: $_POST[name] \n Фамилия: $_POST[lastName] \n Пол: \n $_POST[gender], $_POST[age] лет \n E-mail: $_POST[email]" ); if ($result) { echo '<h3 align="center">Успешно.</h3>'; } else { echo "<p>Ошибка.</p>"; } ?> клонируется строка Пол: \n $_POST[gender], $_POST[age] лет \n не пойму, как туда прописать list с переменными. пробовал уже весь list со всем содержимым заключить в одну переменную, а её прописать в тело письма, но безуспешно. |
Дык и я не пойму. У тя че - можно указать два-три (и более) возраста? Ведь $_POST['gender'] будет массивом.
|
danik.js,
да, селектов может быть несколько. число зависит от числа созданных клонов. вот как выглядит в html: <form action="form.php" method="post" id="form"> <input name="name" type="text" required> <input name="lastName" type="text" required> <a href="javascript:cloneBlockPlus()"> + </a> <!-- кнопка клонирования блока с id="plus" --> <div id="plus"> <select name="gender" required> <option selected >Пол:</option> <option value="муж.">Муж.</option> <option value="жен.">Жен.</option> </select> <input name="age" type="text" required> </div> <input name="email" type="text" required> <input name="button" type="submit" value="Отправить"> </form> |
А где квадратные скобочки на конец? Должно быть name="gender[]" .
В PHP тебе нужно использовать функцию implode($_POST['gender'], ',') - чтоб соединить "полы" в строку через запятую. Не помню как использовать строковую интерполяцию в таких случаях. Так что лучше вынеси в переменную: $genders = implode($_POST['gender'], ','); mail(... "Пол: $genders ..."); Для уверенности сделай echo '<pre>'; print_r($_POST); Это выведет в читаемом виде содержимое POST'а. |
danik.js,
спасибо огромное! в который раз подсказываешь) |
Часовой пояс GMT +3, время: 05:19. |