2013-05-04 82 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語句中。