jQuery - 在新添加的DOM对象上动态使用'.filter'

时间:2011-09-22 21:21:17

标签: javascript jquery jquery-selectors

我正在使用jQuery模板引擎添加动态DOM元素(特别是DIV)。为了控制它们,我使用“实时”方法(例如“点击”事件)。

在某些时候,我需要使用'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');

1 个答案:

答案 0 :(得分: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.