2012-02-01 90 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