2011-09-18 89 views
3

我输出几个textareas页面。 textareas有一类“Expandable”。我曾经在HTML代码中的每一个Expandable textareas之后输出一个div。jQuery - 如何动态地将元素添加到DOM?

硬编码:

<textarea id="NewContent" class="Expandable"></textarea> 
<div class="Count"></div> 

我想改变这种状况,使jQuery的经历和发现的每一个可扩展的textarea和后插入我的伯爵DIV权。要做到这一点,我使用此代码:

$(".Expandable").each(function() { 
    $(this).after("<div class='Count'></div>"); 
}); 

这给了我我需要的东西。但是...因为它在创建后添加到页面中,所以div不会被添加到DOM中。我需要这样的事情发生。

我知道我需要使用“活”,我成功地在其他地方使用它,但我似乎无法得到这个工作。

$(".Count").live(); 

计数div将用于显示上面的textarea的字符数。不会发生用户交互,如键入或模糊。我没有包含这个代码,因为它完美的工作。

EDITED

$(".Expandable").change(function() { 
    $(this).parent().next(".Count").html("Sunday"); 
}); 

当你键入的文本区域,在下一个计数DIV应显示 “星期天”。这与硬编码的Count div完美配合,但不适用于动态生成的Count div。

我已对此作了小提琴:http://jsfiddle.net/EvikJames/qyuQS/2/

+0

'它插入后的新元素。 ..在DOM中。你能详细说明在这里发生了什么*不发生,我对一些不起作用的事情感到困惑。 –

+0

Evik,你的问题仍然没有道理,因为你已经*添加了计数格到DOM,如你发布的链接所证明的。 – lonesomeday

+0

当你输入textarea时,硬编码的div显示“Sunday”。当你输入下面的textarea时,动态创建div什么都不显示。这告诉我,它不会被添加到DOM(我可能是错的)。无论哪种方式,它都不起作用。 –

回答

3

的问题是不是静态VS动态元素......他们都在DOM您.after()执行之后。问题是定位在这里,在原始代码:

$(this).parent().next(".Count").html("Sunday"); 

有喜欢你的静态版本的结构工作:

<div><textarea id="NewContent" class="Expandable"></textarea></div> 
<div class="Count"></div> 

然而,这不是创建:

$(".Expandable").each(function() { 
    $(this).after("<div class='Count'></div>"); 
}); 

以上插入新的<div>作为它的元素的兄弟后插入,所以.after()意味着后立即,创建此:

<div> 
    <textarea id="NewContent" class="Expandable"></textarea> 
    <div class="Count"></div> 
</div> 

有了这个结构,你根本不需要那么.parent()调用,它应该仅仅是:

$(this).next(".Count").html("Sunday"); 

You can test it out here


顺便说一句,.after()作品上的多个元素,它可以是简单的像我上面的例子:当你使用'。经过()

$(".Expandable").after("<div class='Count'></div>"); 
+0

感谢您的帮助。我真的想削减我的代码,并变得更有效率。我非常感谢你的帮助。 –

1

我用你的代码做了的jsfiddle:

http://jsfiddle.net/jeffreydev/qyuQS/

伯爵元素越来越增加,也许你应该添加一些CSS来使他们出现?

编辑:

还是你的意思,你添加的可扩展的textarea对你的DOM?并想在他们下面添加计数?

如果是的话,我会做它像这样:

http://jsfiddle.net/jeffreydev/qyuQS/1/

再次编辑:

正如别人的答案解释,为了改变一个元素中的HTML确保您指定的dom结构中的右元素。

这里是一个工作示例:http://jsfiddle.net/jeffreydev/qyuQS/12/

$(this).parent().next().html('Sunday'); 

释:

$(this) // get the current element as a jquery object (the textarea). 
$(this).parent() // get the selected elements parent (the textarea's parent, the div) 
$(this).parent().next() // and get the element that is next to it in the dom structure (which is the .Count element) 
+0

您是否故意避免关注OP所要求的内容? '.change()'适用于硬编码的'Count' div,但*不是*动态添加的。 –

+0

正如你所看到的,OP编辑了这个问题,并添加了有关change()的信息,以及我当时所掌握的信息,这与我所能提供的帮助一样好。 – jeffreydev

+0

对不起。我看到一个编辑的答案没有提到任何修订中的'.change()'问题。我没有意识到,在关键信息被OP添加之前,两者都被给予*。 –

相关问题