我想创建一个包含3列和*行的网格。问题是与此row.appendChild(col);
元素有关。此功2次运行或零次运行。没有错误,我尝试了不同的浏览器,没有任何线索。
缓冲区超载或内存是否过满?
var Jsonstring ='[{"Imgname":"http://localhost:8080/sbin/_DisplayImage/5ee3e2962d3752338c090e67_2020-06-12_1e9b5.jpg"},{"Imgname":"http://localhost:8080/sbin/_DisplayImage/5ee3e2962d3752338c090e67_2020-06-12_21c02.jpg"},{"Imgname":"http://localhost:8080/sbin/_DisplayImage/5ee3e2962d3752338c090e67_2020-06-12_542b9.jpg"},{"Imgname":"http://localhost:8080/sbin/_DisplayImage/5ee3e2962d3752338c090e67_2020-06-12_66721.jpg"},{"Imgname":"http://localhost:8080/sbin/_DisplayImage/5ee3e2962d3752338c090e67_2020-06-12_8bbfd.jpg"}]';
function doShowUploadedPictures() {
try {
var obDaten = JSON.parse(Jsonstring);
//
var div = document.getElementById("uploaded");
div.innerHTML = "";
div.classList.add("pt-3");
//
var row = document.createElement("div");
row.classList.add("row");
//
var icount = 1;
for (var i in obDaten) {
if (true) {
var btndiv = document.createElement("div");
btndiv.classList.add("position-absolute");
btndiv.style = "display: none";
var button = document.createElement("button");
button.classList.add("btn", "btn-danger");
button.innerHTML = "del";
btndiv.appendChild(button);
var img = document.createElement("img");
if (obDaten[i].Imgname !== null) {
img.src = obDaten[i].Imgname;
}
if (obDaten[i].alt !== null) {
img.alt = obDaten[i].alt;
}
img.classList.add("img-thumbnail", "pt-0", "position-absolute");
var col = document.createElement("div");
col.classList.add("col-md-4", "position-relative");
col.addEventListener('mouseover', function (event) {
event.target.parentNode.childNodes[1].style = "display: flex";
});
col.addEventListener('mouseout', function (event) {
event.target.parentNode.childNodes[1].style = "display: none";
});
//
col.appendChild(img);
col.appendChild(btndiv);
row.appendChild(col);
//
if (icount && (icount % 3 === 0)) {
div.appendChild(row);
row.innerHTML = "";
}
icount++;
}
}
div.appendChild(row);
} catch (e) {
console.log("Error " + e);
}
}
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<button onclick="doShowUploadedPictures()">click</button>
<div id="uploaded"></id>
</body>
</html>
答案 0 :(得分:1)
正如Leandro指出的那样,您的HTML中有一个错字,我已修复。正如半机械人指出的那样,您还删除了整行,并且应该在循环的 inside 行中追加行。我还尝试整理一下代码,以使其更易读且易于调试。
var Jsonstring = '[{"Imgname":"http://localhost:8080/sbin/_DisplayImage/5ee3e2962d3752338c090e67_2020-06-12_1e9b5.jpg"},{"Imgname":"http://localhost:8080/sbin/_DisplayImage/5ee3e2962d3752338c090e67_2020-06-12_21c02.jpg"},{"Imgname":"http://localhost:8080/sbin/_DisplayImage/5ee3e2962d3752338c090e67_2020-06-12_542b9.jpg"},{"Imgname":"http://localhost:8080/sbin/_DisplayImage/5ee3e2962d3752338c090e67_2020-06-12_66721.jpg"},{"Imgname":"http://localhost:8080/sbin/_DisplayImage/5ee3e2962d3752338c090e67_2020-06-12_8bbfd.jpg"}]';
function doShowUploadedPictures() {
var obDaten = JSON.parse(Jsonstring);
// uploaded DIV
var uploaded = document.getElementById("uploaded");
uploaded.classList.add("pt-3");
// loop
var icount = 1;
for (let item of obDaten) {
// Create elements
var row = document.createElement("div");
var btndiv = document.createElement("div");
var delButton = document.createElement("button");
var img = document.createElement("img");
var col = document.createElement("div");
// Classes
row.classList.add("row");
btndiv.classList.add("position-absolute", "btn-div");
delButton.classList.add("btn", "btn-danger");
img.classList.add("img-thumbnail", "pt-0", "position-absolute");
col.classList.add("col-md-4", "position-relative");
// Styles, content
btndiv.style.display = "none";
delButton.innerHTML = "del";
if (item.Imgname)
img.src = item.Imgname;
if (item.alt)
img.alt = item.alt;
// Build out tree
btndiv.appendChild(delButton);
col.appendChild(btndiv);
col.appendChild(img);
row.appendChild(col);
// Add eventListeners
col.addEventListener('mouseover', function(event) {
var target = event.target.parentNode.querySelector('.btn-div');
if (target)
target.style.display = "flex";
});
col.addEventListener('mouseout', function(event) {
var target = event.target.parentNode.querySelector('.btn-div');
if (target)
target.style.display = "none";
});
// DO STUFF WITH MODULUS 3 HERE
// Append row, increment
uploaded.appendChild(row);
icount++;
}
}
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<button onclick="doShowUploadedPictures()">click</button>
<div id="uploaded"></div>
</body>
</html>
答案 1 :(得分:1)
查一下:
var Jsonstring ='[{"Imgname":"http://localhost:8080/sbin/_DisplayImage/5ee3e2962d3752338c090e67_2020-06-12_1e9b5.jpg"},{"Imgname":"http://localhost:8080/sbin/_DisplayImage/5ee3e2962d3752338c090e67_2020-06-12_21c02.jpg"},{"Imgname":"http://localhost:8080/sbin/_DisplayImage/5ee3e2962d3752338c090e67_2020-06-12_542b9.jpg"},{"Imgname":"http://localhost:8080/sbin/_DisplayImage/5ee3e2962d3752338c090e67_2020-06-12_66721.jpg"},{"Imgname":"http://localhost:8080/sbin/_DisplayImage/5ee3e2962d3752338c090e67_2020-06-12_8bbfd.jpg"}]';
function doShowUploadedPictures() {
try {
var obDaten = JSON.parse(Jsonstring);
//
var div = document.getElementById("uploaded");
div.innerHTML = "";
div.classList.add("pt-3");
//
var row = document.createElement("div");
row.classList.add("row");
//
var icount = 1;
for (var i in obDaten) {
if (true) {
var btndiv = document.createElement("div");
btndiv.classList.add("position-absolute");
btndiv.style = "display: none";
var button = document.createElement("button");
button.classList.add("btn", "btn-danger");
button.innerHTML = "del";
btndiv.appendChild(button);
var img = document.createElement("img");
if (obDaten[i].Imgname !== null) {
img.src = obDaten[i].Imgname;
}
if (obDaten[i].alt !== null) {
img.alt = obDaten[i].alt;
}
img.classList.add("img-thumbnail", "pt-0", "position-absolute");
var col = document.createElement("div");
col.classList.add("col-md-4", "position-relative");
col.addEventListener('mouseover', function (event) {
event.target.parentNode.childNodes[1].style = "display: flex";
});
col.addEventListener('mouseout', function (event) {
event.target.parentNode.childNodes[1].style = "display: none";
});
//
col.appendChild(img);
col.appendChild(btndiv);
row.appendChild(col);
// This is the correct if for every 3rd round as you explained in post with the grid
if (icount % 3 === 0) {
div.appendChild(row);
// To delete childs do not emtpy the element like this, because you must declare the new div
var row = document.createElement("div");
row.classList.add("row");
}
icount++;
}
}
div.appendChild(row);
} catch (e) {
console.log("Error " + e);
}
}
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<button onclick="doShowUploadedPictures()">click</button>
<div id="uploaded"></div>
</body>
</html>
答案 2 :(得分:0)
在您的html代码上: 您的div元素未正确关闭,您正在放置:
<div id="uploaded"></id>
您应该输入:
<div id="uploaded"></div>
答案 3 :(得分:0)
您将col
设置为row
的子代:
row.appendChild(col);
然后,在某些情况下,您删除row
内部的所有内容
if (icount && (icount % 3 === 0)) {
div.appendChild(row);
row.innerHTML = ""; // here
}