jQuery:有比下面描述的更简单的使用.clone()的方法吗?

3
如果您在此页面上的控制台中执行,
var cloned = $(".question").clone(true);
$(".question").addClass("first");
var clonedStr = cloned[0].outerHTML || new XMLSerializer().serializeToString(cloned[0]);
$(".question").after(clonedStr);

你需要克隆这个问题(页面上会有两个问题,但第一个问题将使用.first类)。 这就是所需的。

是否有更简单的方法可以使用jQuery完成此操作? 我对上面代码中的第三个字符串感到困惑,并相信它可能更简单。 有什么建议吗? 谢谢。

2个回答

4
如果您不使用HTML字符串,则不需要获取它,只需使用jQuery对象:
var cloned = $(".question").clone(true);
$(".question").addClass("first").after(cloned);

此外,您也可以一行代码实现:

$(".question").after($(".question").clone(true)).first().addClass("first");

@Rort McCrossan:感谢Rort McCrossan和Ionică Bizău的回答。为什么您删除了您的答案?这个更短,所以更好吗? - Haradzieniec
1
@Haradzieniec 我只是在检查一些东西,我以为我的答案是错误的,但它很好地工作了。我的代码比你多了一行,因为我缓存了.question选择器。 - Rory McCrossan
@Rory McCrossan非常感谢您的试用和进一步的解释! - Haradzieniec
1
@Haradzieniec 以代码行数来衡量编程进度,就像用重量来衡量飞机建造进度一样 -- 比尔·盖茨。 :-) 最好使用对象而不是字符串。由于您已经有了jQuery对象,因此无需获取HTML并插入它。请注意,手动插入HTML将使事件处理程序消失。 - Ionică Bizău

2

您可以使用 insertAfter 在更改类之后插入克隆元素。您不需要将 jQuery 对象中的元素转换为字符串,您可以在函数内部使用该对象:

var $question = $('.question');
var $cloned = $question.clone(true).insertAfter($question);
$question.addClass('first');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接