JQuery: динамически создавать теги select
Я использую JQuery для динамического (по выбору пользователя) создания тега. Пользователь вводит параметры в текстовое поле, а мой код создает его.
Script:
var numbersString = "1,2,3,4,5,6";
var data = numbersString.split(',');
var s = $("<select id=\"selectId\" name=\"selectName\" />");
for(var val in data) {
$("<option />", {value: val, text: data[val]}).appendTo(s);
}
s.appendTo("#msj_form");
где msj_form - это мой div id, где тег добавляется.
Сейчас он создает:
<select id="selectId" anme="selectName">
<option value="0">1</option>
<option value="1">2</option>
<option value="2">3</option>
<option value="3">4</option>
<option value="4">5</option>
<option value="5">6</option>
</select>
Но я также хочу конкатенировать код Label и <tr><td>
вместе с тегом
так что код будет выглядеть так:
<tr>
<td>My Label</td>
<td>
<select id="selectId" anme="selectName">
<option value="0">1</option>
<option value="1">2</option>
<option value="2">3</option>
<option value="3">4</option>
<option value="4">5</option>
<option value="5">6</option>
</select>
</td>
</tr>
![enter image description here]()
Ответы
Ответ 1
<!-- Create Dropdown -->
/* 1- First get total numbers of SELECT tags used in your page to avoid elements name/id issues.
* 2- Get all OPTIONS user entered with comma separator into a text box.
* 3- Split user OPTIONS and make an array of these OPTIONS.
* 4- Create SELECT code.
* 5- Appent it into the temp div (a hidden div in your page).
* 6- Then get that code.
* 7- Now append code to your actual div.
* 8- Filnally make empty the temp div therfore it will be like a new container for next SELECT tag.
*/
total = $("select").size() + 1; // 1-
var myoptions = $("#myoptions").val(); // 2-
var data = myoptions.split(','); // 3-
var s = $("<select id=\""+total+"\" name=\""+total+"\" />"); // 4-
for(var val in data) {
$("<option />", {value: val, text: data[val]}).appendTo(s);
}
s.appendTo("#tempselect"); // 5-
var getselectcode = $("#tempselect").html(); // 6-
$("#msj_form").append(appendLabel+"<td>"+getselectcode+"</td></tr>"); // 7-
$("#tempselect").html(''); // 8-
<div style="display:none;" id="tempselect"></div> // Temp div
Ответ 2
var s = $("<select id=\"selectId\" name=\"selectName\" />");
for(var val in data) {
$("<option />", {value: val, text: data[val]}).appendTo(s);
}
после цикла for, оберните весь контент с помощью TableRow и Cells, как это, JQuery Wrap()
$(s).wrap('<table><tr><td></td></tr></table>');
Ответ 3
var html = '<tr><td><label for="select" style="text-transform: none;">Label_name</label></td>'
+'<td><select name="select" id="">'
+'<option>Choose number..</option>'
+'<option value="0">1</option>'
+'<option value="1>2</option>'
+'<option value="2">3</option>'
+'</select></td></tr>';
Предположим, что идентификатор таблицы = table_id
$('#table_id').append(html);
$('#table_id').trigger('create');
То, что я получаю, если вы не вызываете trigger(), дизайн вашего выбора выглядит полностью испорченным.
Ответ 4
Небольшая поправка к ответу Рави - добавление каждого элемента по одному - это удивительно высокая стоимость.
var s = $("<select id=\"selectId\" name=\"selectName\" />");
var opts = [];
for(var val in data) {
opts.push( $("<option />", {value: val, text: data[val]}));
}
opts.appendTo(s);