我有这个由Adobe Muse生成的简单html(我无法直接更改):
<div id="randomID" title="counter"><p>1290</p></div>
我在CountUp脚本中有这个选项:
var counter = new countUp( 'counterID', 0, *Some Value*, 0, 2 );
counter.start(); // run counter
问题是:
我需要找到title="counter"
的所有元素,为每个<p>
设置ID&#39;然后从<p>1290</p>
获取值,将其放入脚本选项并运行每个计数器分开。
我试图这样做:
var counters={};
$("[title='counter']").each(function(){
counters['counter' + this.id]=$(this).children('p').html(); });
$.each( counters, function( id, value ) {
var id = new countUp( $('#' + id), 0, value, 0, 2 );
id.start();
});
我哪里错了?
答案 0 :(得分:1)
我相信你所寻找的可能就是这样:
/* jquery */
var result={};
$("div[title=counter]").each(function(){
result[this.id]=$(this).find("p").html();
});
console.log(result);
/* pure js */
var result2={};
var allP=document.getElementsByTagName("p");
for(var i=0, len=allP.length; i<len; i++){
var parent=allP[i].parentNode;
if(parent.nodeName=="DIV" && parent.title=="counter")
result2[parent.id]=allP[i].innerHTML;
}
console.log(result2);
编辑:
我没有看到,为什么你使用
counters['counter' + this.id]=(...) // why adding 'counter'?
将“计数器”添加到你的内部数组中,你也可以使用
counters[this.id]=(...)
然后在你的$.each
'循环'中传递jQuery对象而不是你提供的showcase所需的id字符串。如果你(保持任何原因)将字符串'counter'添加到数组中的key,你必须像这样转换你的循环:
$.each( counters, function( id, value ) {
// you should name variables differently, maybe key and counter, or key and id, just avoid naming two different variales same
var id = new countUp( id.substr(7), 0, value, 0, 2 );
id.start();
});
所以也许这可能也有效,可能会更好理解
$.each( counters, function( key, value ) {
var objCounter = new countUp(key.substr(7), 0, value, 0, 2);
objCounter.start();
// which could be replaced by (new countUp(key.substr(7), 0, value, 0, 2)).start();
});