2009-11-04 92 views
5

我想使用.live()设置CSS样式。堆叠功能:jQuery .live()和文档准备

$(".data tr:odd").addClass("evenrows"); 

有没有一种方式,这在文件准备自动发生,但还是发生了未来元素?我在页面上有一个ajax事件来重新排序表。我需要这些新创建的行以将.addClass应用于它们。

在此先感谢。

+0

你可以在ajax调用中添加类吗? – Jason 2009-11-04 20:33:08

+0

@Jason,我可以但如我在下面的评论中所说的,我想避免不得不重新编写它,因为我永远不会打电话给我。我应该只需要一次。 – jay 2009-11-04 21:25:23

回答

5

您可以使用Livequery plugin。它结合自身DOM突变事件来跟踪DOM变化,并重新绑定和重新执行代码连接到他们,例如:

$(".data tr:odd").livequery(function(){ 
    $(this).addClass("evenrows"); 
}); 
+0

@pǝlɐɥʞ,这是一个很好的解决方案,所以+1。我仍然觉得必须有一种方法来使用.live()来做到这一点。这个想法是把.addClass放入$(“body”)。live(“load”,function(){});这显然不起作用。有没有像这样的解决方案,或者我是否辞职使用插件? – jay 2009-11-04 21:27:42

+0

@jeerose恐怕你将不得不为这种情况使用一个插件...因为jQuery.live()仅用于绑定事件,而你在这里要做的事情显然不是一个事件 – ekhaled 2009-11-05 10:23:55

+0

你可以找到列出Livequery在文档上绑定的事件,并在同一事件上执行您自己的事件代理。 – Mark 2009-11-06 18:59:10

1

我们已经通过钩入Ajax事件委托并完成我们想要的任务来完成此任务。请参阅“完成”:http://docs.jquery.com/Ajax/jQuery.ajax#options

您将使用Live将任何事件处理程序附加到这些新行。请参阅:http://docs.jquery.com/Events/live#typefn

+0

我使用的是完整的。我只是觉得现在会有更高效的解决方案,因为现在我有了DOM准备好时触发的函数,然后我必须将它附加到我有的任何ajax调用。我宁愿不必担心记得这样做。这也意味着我一遍又一遍地为每个Ajax调用写它。思考? – jay 2009-11-04 16:43:24

+0

您不必写下来,只需在两个地方调用相同的方法即可。 – Mark 2009-11-05 21:37:50

0

现在我们的JavaScript是建立一个接受参数的全局AJAX调用函数需要。使用带扩展参数的模板函数可以使您想要进行的更改可以消除任何不必要的重复代码并打开更多可管理代码的可能性。

例子:

GlobalObject.AjaxFunction(sUrl, SData, fnOnSuccess, fnOnError, oExtension) 
{ 
    //Set up Ajax process 

    // check type of extension as a function 
    if (typeof oExtension === 'function') 
    { 
     oExtension(); 
    } 
} 

这将使你的代码有通用的可用性对Ajax处理后。

希望这可以帮助您满足您的需求,如果我不太理解评论以让我知道!