2013-05-04 61 views
4

我隐藏div直到经过了一段特定的时间,我试图告诉jQuery用相应的时间显示特定的div。jQuery .show()一个具有特定值属性的div

HTML

<div class="content"> 
    <div class="item" value="00:15"> 
     <p>Some text</p> 
    </div> 
    <div class="item" value="00:30"> 
     <p>More text</p> 
    </div> 
    <div class="item" value="01:00"> 
     <p>Even more text</p> 
    </div> 
</div> 

JS

$('.content').children().hide(); 

// some timer function returning timeElapsed 

var myTime = '01:00'; 
if (timeElapsed == myTime) { 
    $('.item').attr('value', myTime).show(); 
} 

发生了什么事是if语句被触发时所有.item的div都出现,而不是由var myTime指定的。什么需要改变?

+0

我看不到你在哪里定义了代码中的'timeElasped' ..?你可以发布 – bipen 2013-05-04 17:36:00

+0

timeElapsed将由计时器功能返回。我编辑了JS评论来澄清这一点。 – 2013-05-04 17:41:54

+0

每个'.item'都给'myTime'的''值',然后'.show()'全部。你想使用'$(“。class [attr = val]”)'。 – 2013-05-04 17:50:37

回答

1

试试这个:

if (timeElapsed === myTime) { 
    $('.item[value="' + myTime + '"]').show(); 
} 
1

什么这行做$('.item').attr('value', myTime).show();被抢占了所有item元素上的所有元素.item设置attrmyTime和触发表演。

如果你需要一个更好的选择,即attribute equals

$('.item[value="' + myTime + '"]')

另一种方式来做到这一点是不会导致再次查询DOM会在一个简单的each()循环来设置定时器。

你应该使用data-*属性可能会更好地为你和jQuery一起工作。

同样以总秒数进行处理也会使得处理值变得更容易一些。

<div class="content"> 
    <div class="item" data-seconds="15"> 
     <p>Some text</p> 
    </div> 
    <div class="item" data-seconds="30"> 
     <p>More text</p> 
    </div> 
    <div class="item" data-seconds="60"> 
     <p>Even more text</p> 
    </div> 
</div> 

$("div.item").hide().each(function(index, item){ 
    var $item = $(this); 
    setTimeout(function(){ 
     $item.show(); 
    }, $item.data("seconds") * 100); 
}); 

Example on jsfiddle

0
if (timeElapsed == myTime) { 
    $('.item[value=' + myTime + ']').show(); 
} 

if (timeElapsed == myTime) { 
    $('.item').filter('[value=' + myTime + ']').show(); 
} 

从外观上来看,你不需要if语句中。

相关问题