JQuery append方法多个父元素追加相同的元素

时间:2017-07-05 03:32:19

标签: javascript jquery

宣布API文件:

  

如果以这种方式选择的元素插入到单个位置   在DOM的其他地方,它将被移动到目标(未克隆)。   重要提示:但是,如果有多个目标元素,则克隆   将为每个目标创建插入元素的副本,除外   为了最后一个。

var div = $("<div></div>").addClass("divCells"),
    tdName = $("<td></td>").addClass("tdName"),
    tdAge = $("<td></td>").addClass("tdAge"),
    tdGender = $("<td></td>").addClass("tdGender"),
    tds = [tdName, tdAge, tdGender],
    tr = $("<tr></tr>"),
    tbody = $("#peopleList tbody");
    tds.append(div);
    tr.append(tdName).append(tdAge).append(tdTimetdGenderstamp);
    tbody.append(tr);

如上面的代码所示,我尝试将3个tds包含在一个数组中,这样我就可以将div添加到所有数组中,但它不起作用。

1 个答案:

答案 0 :(得分:1)

您尝试在vanilla JavaScript Array上使用jQuery .append.append仅适用于jQuery / DOM元素,而不适用于Arrays等JavaScript类型。

您的tds数组包含jQuery / DOM元素,但数组本身并不是可附加的&#39;以你正在尝试的方式。

使用数组,您必须遍历数组,并手动将div附加到其中的每个元素。此外,由于您将单独附加3个单独的元素(即每次迭代1次,而不是同时3次),您必须自己手动.clone div,否则您只需要将一个div附加到数组中的第一个项目,然后将移动相同的div移至第二个,再移至第三个。所以......

// tds.append(div); // Change this to...
for (var i=0; i< tds.length; i++) {
   tds[i].append(div.clone())
}

或...

你可以忘记完全使用数组,并使用jQuery克隆并为你附加div(正如你原来的问题暗示的那样)。以下是......

// Remove the following lines...
// tds = [tdName, tdAge, tdGender],
// tds.append(div);

// Then, after you add the td's to your row here...
tr.append(tdName).append(tdAge).append(tdGender);

// ...have jQuery find all the td's and clone+append your div to them in one hit:
tr.find('td').append(div)