Javascript 包装每个元素,然后在包装器前添加一个新的div?

Javascript 包装每个元素,然后在包装器前添加一个新的div?,javascript,jquery,Javascript,Jquery,我试图使用jQuery(3.1.1)包装给定类的元素,然后在包装器中的第一个元素前面添加一个新的div。我已经尝试了很多东西,这是我能得到的最接近的 testWrap = function() { var testWrapImpl = function(index, value) { var div = $("<div></div>"); $(value).wrap(div); $(div).prepend("<

我试图使用jQuery(3.1.1)包装给定类的元素,然后在包装器中的第一个元素前面添加一个新的div。我已经尝试了很多东西,这是我能得到的最接近的

testWrap = function() {
    var testWrapImpl = function(index, value) {
        var div = $("<div></div>");
        $(value).wrap(div);
        $(div).prepend("<div class='child-div'>some text</div>");   
        alert("done");
    };
$(".myClass").each(testWrapImpl);
testWrap=function(){
var testWrapImpl=函数(索引、值){
var div=$(“”);
$(值).wrap(div);
$(div).prepend(“某些文本”);
警惕(“完成”);
};
美元(“.myClass”)。每个(testWrapImpl);
这段代码成功地用外部div包装了每个元素,但似乎对“sometext”div没有任何作用

页面中的每个元素都会显示警报,页面加载时似乎没有错误

我做错了什么?

方法
.wrap()
将包装的副本包装在每个目标元素周围。因此,一旦调用了
.wrap()
,您的
div
对象就是一个完全正常的元素,但它不是实际的包装

您可以做的是向包装器添加一个类,进行包装,然后找到包装器并添加额外的元素:

$(".myClass")
    .wrap("<div class='wrapper'></div>")
    .closest(".wrapper")
    .prepend("<div class='child-div'>some text</div>");
.wrap()
方法将一个副本包装在每个目标元素周围。因此,一旦调用了
.wrap()
,您的
div
对象就是一个完全正常的元素,但它不是实际的包装

您可以做的是向包装器添加一个类,进行包装,然后找到包装器并添加额外的元素:

$(".myClass")
    .wrap("<div class='wrapper'></div>")
    .closest(".wrapper")
    .prepend("<div class='child-div'>some text</div>");
您可以在使用
.wrap()
之前使用
.prepend()
,以实现您的目标

此外,一旦将
div
变量定义为jQuery对象,就应该引用
div
变量,而不是
$(div)

var testWrapImpl=函数(索引,值){
$(value).wrap(“”).parent().prepend(“某些文本”);
警惕(“完成”);
};
美元(“.myClass”)。每个(testWrapImpl);

您可以在使用
.wrap()
之前
.prepend()

此外,一旦将
div
变量定义为jQuery对象,就应该引用
div
变量,而不是
$(div)

var testWrapImpl=函数(索引,值){
$(value).wrap(“”).parent().prepend(“某些文本”);
警惕(“完成”);
};
美元(“.myClass”)。每个(testWrapImpl);

这可能适用于OP,但结果是原始元素被包装在“some text”中
API将目标放在包装器结构的最里面的元素中。我刚在“开发人员”选项卡中查看了它,但我会再查看一次。@Pointy是正确的,这可能无法达到预期的结果!这对我来说很有效。这个解决方案是否可能是特定于浏览器的,这就是为什么它对某些人不起作用的原因?对不起,你是正确的ct.prepend函数包装.myClass元素。它不会将“some text”DIV添加到.myClass元素的开头。它会在“some text”之前预处理“some text”DIV的内容,然后包括.myClass内容,然后关闭“some text”div.这可能对OP有效,但结果是原始元素被包装在“some text”中
API将目标放在包装器结构的最里面的元素中。我刚在“开发人员”选项卡中查看了它,但我会再查看一次。@Pointy是正确的,这可能无法达到预期的结果!这对我来说很有效。这个解决方案是否可能是特定于浏览器的,这就是为什么它对某些人不起作用的原因?对不起,你是正确的ct.prepend函数包装.myClass元素。它不会将“some text”DIV添加到.myClass元素的开头。它在“some text”之前预先添加“some text”DIV的内容,然后包含.myClass内容,然后关闭“some text”DIV。我更愿意自己作为(1)遍历每个项我需要对单个元素执行特定操作,例如,为每个元素添加不同的guid,或者如果元素满足某些条件,则可能执行条件操作。是否有方法通过隐式调用执行此操作?和(2)我是一个喜欢Java的人,所以我很难改变我对这些东西的看法;)请注意,您还可以向
.wrap()传递一个函数
.jQuery将把该函数的索引传递到原始目标列表中,
将引用该调用的目标元素。函数的返回值应该是该元素使用的包装器。我将扩展答案以澄清问题。我更愿意自己迭代每个项,如(1)我需要对单个元素执行特定操作,例如,为每个元素添加不同的guid,或者如果元素满足某些条件,则可能执行条件操作。是否有方法通过隐式调用执行此操作?和(2)我是一个喜欢Java的人,所以我很难改变我对这些东西的看法;)请注意,您还可以向
.wrap()传递一个函数
.jQuery将把该函数的索引传递到原始目标列表中,
将引用该调用的目标元素。函数的返回值应该是该元素使用的包装器。我将扩展答案以澄清。
    var testWrapImpl = function(index, value) {
        $(value).wrap( '<div></div>' ).parent().prepend("<div class='child-div'>some text</div>");   
        alert("done");
    };
$(".myClass").each(testWrapImpl);