为各种 div 容器添加计数器



首先,我知道这个标题有点令人困惑,但我要解释我想做什么。

我创建了一个简单的.html和.js文件,该文件具有不同的div标签。我用 for 循环循环了div 标签,div 容器的文本应该添加到我创建的表中。

<HTML>
<head>
</head>
<body>  
<div id="divContainer">
<div class="div">
one
</div>
<div class="div">
two
</div>
<div class="div">
three
</div>
<div class="div">
four
</div>
<div class="div">
five
</div>
<div class="div">
six
</div>
</div>

<table id="table">
</table>
<p id="output">
</p>
</body>
</HTML>

JavaScript 文件:

var divLists = document.getElementsByClassName('div');
window.onload = function() {
for (i = 0; i < divLists.length; i++) {
var divList = divLists[i];
divList.onclick = function() {
x(this.innerHTML);
}
}
};
function x(y) {
var table = document.getElementById('table');
var Row = table.insertRow();
var Cell = Row.insertCell(0);
var newText = document.createTextNode(y);
Cell.appendChild(newText);
}

我还把代码放在jsfiddle中:https://jsfiddle.net/avj4zg21/11/

因此,通过单击"一","二","三",...它将被添加到表中,但它想要添加一个计数器。因此,例如,如果我单击一个,它应该添加到表中,如果我单击第二次或第三次,则后面应该有一个计数器:"一个(按 3 次("。

提前谢谢你

您可以使用Map来跟踪单击的项目并递增现有项目:

var divLists = document.getElementsByClassName('div');
window.onload = function() {
for (i = 0; i < divLists.length; i++) {
var divList = divLists[i];
divList.onclick = function() {
x(this.innerHTML);
}
}
};
let map = {};
function checkNumber(number){
if(map[number])
map[number] = map[number] + 1;
else
map[number] = 1;
return map[number];
}
function x(y) {
var table = document.getElementById('table');
let rows = table.rows;
let count = checkNumber(y);
var Row = table.insertRow();
var Cell = Row.insertCell(0);
Cell.innerHTML = count;
Cell = Row.insertCell(0);
Cell.innerHTML = y;
}
<HTML>
<head>

</head>
<body>  
<div id="divContainer">
<div class="div">
one
</div>
<div class="div">
two
</div>
<div class="div">
three
</div>
<div class="div">
four
</div>
<div class="div">
five
</div>
<div class="div">
six
</div>
</div>
<table id="table">
</table>

<p id="output">

</p>
</body>
</HTML>

为每一行生成递增的 id(作为类(。 使用数据集将计数器添加为数据属性。 如果需要在同一计数器上具有相同内容的多个div,则必须使用地图、附加数据或扫描内容。
注意:您当前的方案采用divs的整个HTML内容,这实际上是" one"的,而不是简单的单词字符串。

var divLists = document.getElementsByClassName('div');
window.onload = function() {
for (i = 0; i < divLists.length; i++) {
var divList = divLists[i];
let idx = i; // store current index, so it can be used below
divList.onclick = function() {
x(this.innerHTML, idx);
}
}
};
function x(y, idx) {
var table = document.getElementById('table');
var Row = table.getElementsByClassName(`id${idx}`)[0] || table.insertRow();
Row.classList.add(`id${idx}`); // generate `id${idx}` as a class
var Cell = Row.cells[0] || Row.insertCell(0);
Cell.innerHTML = y + (Row.dataset.count ? `(${Row.dataset.count})`: '');
Row.dataset.count = (+Row.dataset.count + 1)||2;
// convert count to number increment, or if not defined yet start at 2
}
<HTML>
<head>

</head>
<body>  
<div id="divContainer">
<div class="div">
one
</div>
<div class="div">
two
</div>
<div class="div">
three
</div>
<div class="div">
four
</div>
<div class="div">
five
</div>
<div class="div">
six
</div>
</div>
<table id="table">
</table>

<p id="output">

</p>
</body>
</HTML>

最新更新