为什么每次将div标签传递给变量时,将变量作为参数传递都偶尔起作用?

时间:2018-09-28 13:16:49

标签: jquery

我有一个文件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}}

它应该出现在应有的位置。为什么一个总是工作而不是另一个工作?

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>