gpt4 book ai didi

javascript - 如何动态初始化select2

转载 作者:可可西里 更新时间:2023-11-01 13:22:31 25 4
gpt4 key购买 nike

我通过 AJAX 在我的 DOM 中插入概念行(带有选择和输入文本元素)。我想将那些选择初始化为 select2: 但我不知道这样做的正确方法。

  • 我应该在每一行中编写 javascript 吗? (通过AJAX插入html和JS)

我在每个 AJAX 请求中得到这个:

<select id="concept0"> 
<option value="Test"> Test </option>
<option value="Test2"> Test 2 </option>
</select>
<script> $("#concept0").select2(); </script>

但我认为在我的 AJAX 响应中返回带有 HTML 的 javascript 是错误的想法。还有其他选择吗?

谢谢,对不起,如果我的问题有点愚蠢......

最佳答案

我会像这样构建流程:

  • 对部分选择进行分组以减少 Ajax 请求的数量
  • 使用“data-”向部分 HTML 添加标记
  • 使用 AJAX GET 检索部分 html;
  • 初始化元素;
  • [可选] 分离目标父元素 - 性能原因;
  • 将元素附加到目标;
  • [可选]重新附加目标元素;
  • 初始化小部件。

我在这里做了一个模拟:http://jsbin.com/jotitu/edit?js,output

下面是一个小解释:

假设您有以下 HTML:

<div id="concept-table-container">
<table>
<tr>
<th>
No.
</th>
<th>
Name.
</th>
<th>
Option.
</th>
</tr>
<tr>
<td>1</td>
<td>abc</td>
<td></td>
</tr>
<tr>
<td>2</td>
<td>dce</td>
<td></td>
</tr>
<tr>
<td>3</td>
<td>fgh</td>
<td></td>
</tr>
</table>
</div>

将部分选择分组以减少 Ajax 请求的数量并使用“data-”向部分 HTML 添加标记

如果您可以像这样对部分 HTML 进行分组和编写,那么您就不需要对每一行都执行 Ajax 请求。您也可以选择限制它们,但这需要更多的“分页”编程。

<select data-widget="select2" data-row-idx="0"> 
<option value="Test"> Test </option>
<option value="Test2"> Test 2 </option>
</select>
<select data-widget="select2" data-row-idx="1">
<option value="Test"> Test </option>
<option value="Test2"> Test 2 </option>
</select>
<select data-widget="select2" data-row-idx="2">
<option value="Test"> Test </option>
<option value="Test2"> Test 2 </option>
</select>

使用 AJAX GET 检索部分 html

这里就不详细说了,说完就够了:

$.get(conceptPartialUrl, successCallback);

初始化元素;

var successCallback = function(data){
var $fragmentEl = initEls(data);
// Optionally before appending the selects detach the container;
appendElements($fragmentEl, $containerEl);
// Initialize the widgets.
initSelect2Widgets();
};


var initEls = function(data){
// Create DOM elements - JQuery Way
var $fragmentEl = $(data);
// Return the reference
return $fragmentEl;
};

将元素附加到目标;

var appendElements = function($fragmentEl, $containerEl){
var $rows = $containerEl.find('tr');
$fragmentEl.each(function(){
var $el = $(this);


// some matching - you
var idx = $el.data('row-idx');

// that plus 1 is to skip the header
// find the row
var $row = $rows.eq(idx+1);
// find the cell, empty it and append the element
$row .find('td').last().text('').append($el);
});
};

初始化小部件

var initSelect2Widgets = function(){
$containerEl.find('[data-widget="select2"]').select2();
};

关于javascript - 如何动态初始化select2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32984078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com