jQuery .live()和文档就绪

5

我正在尝试使用.live()来设置CSS样式。CSS函数如下:

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

有没有一种方法可以在文档就绪时自动发生,但仍然适用于将来的元素?我在页面上有一个ajax事件,重新排列表格。我需要这些新创建的行应用.addClass。

提前致谢。


你能在 AJAX 调用中添加类吗? - Jason
@Jason,我可以这样做,但是就像我在下面的评论中所说的那样,我想避免每次进行ajax调用时都必须重新编写它。我只需要调用一次即可。 - jay
3个回答

5

您可以使用Livequery插件。它绑定到DOM变异事件来跟踪DOM中的更改,并重新绑定和重新执行附加到它们的代码,例如:

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

@pǝlɐɥʞ,这是一个很好的解决方案,所以+1。我仍然觉得有一种方法可以使用.live()来实现这个功能。想法是将.addClass放在$("body").live("load", function(){});中,但这显然行不通。是否有类似的解决方案,或者我只能使用插件了? - jay
@jeerose,恐怕你需要使用插件来解决这个问题...因为jQuery.live()仅用于绑定事件,而你在这里尝试做的显然不是一个事件。 - ekhaled
你可以找出Livequery绑定到文档上的事件,并在同一事件上进行自己的事件委托。 - Mark
@Mark,恐怕情况比那更加复杂.... DOM突变事件在IE中不能被触发(至少我所知道的不可靠)。Livequery消除了跨浏览器DOM突变事件的麻烦。 - ekhaled

1

我一直在使用complete。但是我认为可能有更有效的解决方案,因为现在我必须在DOM准备就绪时触发函数,然后将其附加到任何ajax调用中。我宁愿不必担心记得这样做。此外,这意味着我需要为每个ajax调用重复编写它。你有什么想法? - jay
你不需要重复编写代码,只需在两个位置调用同一个方法即可。 - Mark

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处理后具有通用性。

希望这能帮助您满足需求,如果我没有完全理解,请评论让我知道!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接