我有一个文件test.js
在test.js的顶部,我声明了以下变量:
$("#dvMain :input:not([type=hidden]):not([type=submit]):not([type=button])").closest(".form-group").prepend(requiredDiv);
然后我有一个循环遍历一个类的函数,并将上述变量/ div附加到div
$("#dvMain :input:not([type=hidden]):not([type=submit]):not([type=button])").closest(".form-group").prepend($("<span class='markrequired'>*</span>"));
这在99%的时间内都有效,但会随机出现一些不显示图标的文本框实例
但是,如果我将代码更改为此:
{{1}}
它应该出现在应有的位置。为什么一个总是工作而不是另一个工作?
答案 0 :(得分:1)
因为您每次都附加相同的元素,而不是新的元素。这意味着它将元素从原来的位置移到新位置。
如果您使用与模板相同的基本元素,则需要制作一个副本。使用jQuery的clone方法很容易。
...closest(".form-group").prepend(requiredDiv.clone());
示例显示非克隆vs克隆:
var elem1 = $("<span>Hello 1</span>");
var elem2 = $("<span>Hello 2</span>");
$("#out1").append(elem1);
$("#out1").append(elem1);
$("#out2").append(elem2.clone());
$("#out2").append(elem2.clone());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="out1"></div>
<div id="out2"></div>