[英]jQuery: Record element changes in Array and check how it was by its index
每次单击都是一步,并将在.test
添加一个子div,我将所有元素更改都保留在step
数组中
我希望它看起来像这样:
Array step [0] = before click,
Array step [0,01] = after one click,
Array step [0,01,012] = aftert two click
但是它是这样的:
Array step [0] = before click,
Array step [0,11] = after one click,
Array step [0,11,222] = aftert two click
HTML:
<div class="test"></div>
<button type="button" onclick="change()">Count Child Element</button>
<div id="result"></div>
JavaScript的:
var step =[]; // step is a record of changes in #test.
step.push($('.test')) //step[0] is status of .test at very beginning.
$('#result').append(step[0][0].childElementCount+"<br>") // #result showing how many child element in #test
var change = function (){
$('.test').append('<div>t</div>') //every click will a append <div> in #test
step.push($('.test')) // record this move in step[]
console.log('step length',step.length) // total moves
for ( var i = 0; i < step.length; i++ ) {
$('#result').append(step[i][0].childElementCount)
}
$('#result').append("<br>")}
非常感谢您的提前帮助。
您的循环迭代( i
)应该基于childElementCount
而不是step
长数组的长度。
我更改了代码,以使用step[step.length-1]
获取数组中的最后一个元素,并更改了for循环,使其在遇到最后一个childElementCount
时停止。 我还显式调用了change()
以使其为您创建和呈现第一个元素,以避免重复代码。
固定的小提琴: http : //fiddle.jshell.net/8sbq0y0k/
固定代码:
var step = []; // step is a record of changes in #test. function change() { $('#test').append('<div>t</div>') //every click will a append <div> in #test step.push($('#test')) // record this move in step[] console.log('step length', step.length) // total moves for (var i = 0; i < step[step.length-1][0].childElementCount; i++) { $('#result').append(i.toString()) } $('#result').append("<br/>") } change(); // let change do the work for you
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="test"></div> <button type="button" class="btn btn-warning pull-right" onclick="change()">Count Child Element</button> <div id="result"></div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.