2011-09-22 59 views
0

我使用jQuery模板引擎添加动态DOM元素(特别是DIV)。为了控制它们,我使用'实时'方法(例如'点击'事件)。jQuery - 在新添加的DOM对象上动态使用'.filter'

在某些时候,我需要使用'过滤器'方法找到一些新创建的元素。看来它不会找到新创建的元素。

任何想法为什么?

我的代码由具有不同数据setid属性的DIV组成。它们是使用jQuery .tmpl插件生成的。

我使用选择器来查找适当的“ListOfStuff”DIV并添加一个新的“Stuff”DIV。

因此,它将在服务器上生成的这样的DIV上工作,然后服务,但不会在新创建的DIV上工作。

<div class="SomeStuffSet" data-setid="MySetID"> 
     -- some stuff here -- 
     <br /><br /> 

     <div class="ListOfStuff"> 

      <div class="Stuff"> 
      My Name 
      </div> 

      <div class="Stuff"> 
      My Name 
      </div> 

      <div class="Stuff"> 
      My Name 
      </div> 

     </div> 
    </div> 

,我的选择是这样的:

var setdiv = $('div').filter('.SomeStuffSet').filter(function() { return $(this).attr('data-setid') == $('#currentSetID').val(); }).children('.ListOfStuff'); 

回答

0

我不认为你需要一个过滤器,你可以试试这个:

$("div.SomeStuffSet[data-setid='" + $("#currentSetID").val() + "'] > div.ListOfStuff"); 

在问候您的评论:

我相信你正在努力做到这一点

var setdiv = $("div.SomeStuffSet[data-setid='" + $("#currentSetID").val() + "'] > div.ListOfStuff"); 

//Code to append newly created object 
//... 

console.log(setdiv); // My assumption is that you believe setdiv should contain newly created object. This is not correct 

//repopulate setdiv with newly create objects 
setdiv = $("div.SomeStuffSet[data-setid='" + $("#currentSetID").val() + "'] > div.ListOfStuff"); 

console.log(setdiv) //now setdiv with contain newly created objects. 
+0

谢谢 - 代码更好:)但仍然没有解决实时过滤的问题。它不会找到新创建的对象... – Roman

+0

对不起。它工作!谢谢:) – Roman

+0

@roman ...如果你永远不会重新填充你的变量setdiv,那么它不会有新创建的对象。看到我的回答 –