在 .before() 中多次使用相同的参数并不像我预期的那样工作
Using same argument multiple times in .before() does not work as I expected
HTML:
<div class="here">This is here</div>
<div class="insert">This is to be inserted</div>
j查询:
$(document).ready(function() {
var $m = $(".insert");
$(".here").before($m);
});
它产生预期的结果 - 剪切insert
div 并将其粘贴到here
div 之前。但如果代码如下,
$(".here").before($m, $m);
然后insert
在here
div之前不会出现两次。但是,如果我使用以下方式使用第一个参数以外的div
参数作为第二个参数:
$(".here").before($m, $('<div class="insert2">This is insert 2</div>'));
然后insert
和insert2
divs
都出现在here
div
之前.
如果两个参数相同,为什么两个divs
不会出现在here
div
之前?
您正在做的是将现有元素从一个位置移动到另一个位置;您不会创建它的其他副本。使用.clone()
方法创建副本并插入到所需位置:
$(".here").before(
$m /*.attr("title", "original")*/,
$m.clone() /*.attr("title", "copy # 1")*/,
$m.clone() /*.attr("title", "copy # 2")*/
);
您的另一个示例创建了一个新元素,这就是它按预期工作的原因。
当您将现有的 DOM 元素作为参数提供给 DOM 插入方法时,它不会复制该元素,它只是将该元素移动到您指定的位置。单个 DOM 元素一次只能位于一个位置,因此,如果指定同一元素两次,则会移动它两次。如果需要元素的副本,则必须显式创建它们:
$(".here").before($m, $m.clone());
这是因为一个元素只能存在一次。$(".here").before($m, $m);
您说在".here"之前插入element_x,然后在".here"之前插入element_x。所以它被移动了,而不是再次移动到同一个地方。
使用 $(".here").before($m, $('<div class="insert2">This is insert 2</div>'));
,您将在第二个参数中创建一个新元素,以便正常工作。
要复制元素以插入两次,您可以克隆该元素并同时插入:
var $m2 = $m.clone();
$(".here").before($m, $m2);
相关文章:
- 无法使我的文本参数与我的查询一起工作
- 如何使参数在事件函数中工作
- 将图标作为参数传递不会;t工作-谷歌地图
- 添加第二个参数时,Javascript函数将停止工作
- 当名称空间在id参数之前声明时,Angular UI路由器停止工作
- 窗口clearInterval()在没有参数的情况下工作
- 无法获取用户 ID 路由参数以在反应路由器中继上工作
- 在 .before() 中多次使用相同的参数并不像我预期的那样工作
- JS .replace(str, str):如何获取参数 1 中的变量并全局工作
- 忽略服务工作进程请求中的查询参数
- JQuery 函数突然停止工作,转换 Javascript 参数时出错
- 猫鼬对象 ID 不作为函数中的参数工作
- JavaScript onclick 函数在参数为整数而不是字符串时工作
- 添加参数时调用javascript函数停止工作,这真的不大声吗
- 缺少参数 &&&||括号中的运算符,但仍在工作
- g:message 在 Javascript / jQuery 中带有参数的参数无法按预期工作
- JSON.stringify()工作不正常-第二个参数消失
- 为什么Selenium WebDriver不使用JavaScript等待时间参数工作
- 如何使Javascript定时器为变量参数工作
- 为什么不't将该方法作为参数工作传递