仅在先前未使用jQuery添加元素之后添加元素

时间:2011-08-08 23:24:26

标签: javascript jquery ajax dhtml

我有一些jQuery代码可以找到带有着色 CSS类的元素,并在其后面添加一个div元素。它在文档就绪事件处理程序中运行。

$(".shaded").after("<div class='shader'></div>");

着色器类提供样式以使上面的元素看起来像。

我的问题是我们开始使用Ajax来填充内容,所以现在我需要在每次使用Ajax检索新内容时运行上面的代码。

我想知道的是我如何检测此动态添加的“着色器”div是否已添加。我知道我可以使用这个找到下一个元素:

$(".shaded").next("div").hasClass("shader")

但是,我如何优雅地将“着色器”添加到尚未着色的元素中?

提前致谢。

3 个答案:

答案 0 :(得分:1)

你可以尝试这样的事情(虽然未经测试):

$(".shaded + :not('div.shader')").prev().after("<div class='shader'></div>");

它会找到包含shaded类的所有div,并过滤掉那些没有div .shader之后的div。

感谢@Joseph指出.prev()

答案 1 :(得分:1)

首先,你应该用CSS解决这个问题。但我可以想象很难做到的情况(*咳嗽* IE6 *咳嗽*)。

你可以用讨厌的jQuery方式做到这一点并派生出哪些元素已经有着色器,就像Mrchief的解决方案一样。 或者你采取负责任的解决方案并保留已着色的元素列表,甚至更好的是,仍然需要着色的元素列表。

jQuery鼓励您“滥用”您的DOM来存储有关模型的信息,而您真的应该根据模型中的信息创建模型并使用jQuery。这正是为什么我不再使用jQuery来处理任何不涉及非常复杂任务的事情的原因(我仍然将它用于动画和幻想插件,如灯箱)。

答案 2 :(得分:1)

$(".shaded + :not(.shader)").prev().after("<div class='shader'></div>");

有效,tested