2012-02-01 123 views
0

我要選擇跨度是使用jQuery 這裏在運行時畫報年代導致代碼jQuery選擇不工作

<div id="phases"> 
<div> 
    <span class="phaseTimer">test</span> 
</div> 
    <div> 
    <span class="phaseTimer">test</span> 
</div> 
<div> 
    <span class="phaseTimer">test</span> 
</div> 
    <div> 
<span class="phaseTimer">test</span> 
</div> 
</div> 

我用裏面$.each這個jQuery選擇器選擇跨度

$("div#phases div:nth-child("+(index+1)+") span.phaseTimer").text("Not started yet"); 

這裏是我想要的例子,但選擇器是不正確的! http://jsfiddle.net/jaVB9/3/

編輯 這裏的問題的情況下我面對

http://jsfiddle.net/jaVB9/6/

+2

看來你在呼喚你的代碼插入HTML之前。這是行不通的。另一方面,我真的沒有看到在這裏使用選擇器的理由。只需在創建元素時設置適當的文本。使用jQuery或純DOM方法會比字符串連接更容易一些。 – 2012-02-01 18:48:02

+0

此外,包括'div#phases'中的div是完全沒用的。在文檔中'#階段'應該是唯一的。 – Andrew 2012-02-01 18:53:13

+0

@Andrew我讀過之前使用div @階段比#phases快得多,對嗎? – palAlaa 2012-02-01 18:57:17

回答

2

這是因爲你正在努力尋找的元素之前它被添加到DOM。我已將它固定在你的小提琴上看看。此外,您不需要選擇器,您可以在創建所需標記時設置文本。

var allPhases=""; 

    $.each(phasesData,function(index){ 
     var startDate = new Date(phasesData[index].startDate); 
     var endDate = new Date(phasesData[index].endDate); 

     if(phasesData[index].isCurrent=="true"){ 
      var elapsed_seconds =endDate-startDate; 
      allPhases+="<div><span class=\"phaseTimer\">test</span></div>"; 
      setInterval(function() { 
       elapsed_seconds = elapsed_seconds - 1000; 
       $("div#phases div:nth-child("+(index+1)+") span.phaseTimer") 
       .text(getElapsedTimeStrFormat(elapsed_seconds)) 
      }, 1000); 
     } 
     else if(phasesData[index].isCurrent=="false"){ 
      allPhases+="<div><span class=\"phaseTimer\">"+startDate+"</span></div>"; 
     } 
    }); 


$("div#phases").html(allPhases); 

http://jsfiddle.net/jaVB9/9/

+0

其實這是我的代碼快照,我不能使用這種方式,因爲在跨度裏面iscurrent條件會有一個計時器的調用,我會用setInterval()函數,這種方式不能解決問題。 – palAlaa 2012-02-01 18:55:05

+0

如果你應該在問題中解釋你的實際情況,那麼我們會相應地回答。看着你的小提琴,我認爲這是正確的做法。 – ShankarSangoli 2012-02-01 19:00:28

+0

請檢查我的問題更新的jsfiddle – palAlaa 2012-02-01 19:09:31