2011-09-18 6 views
3

페이지에 여러 텍스트 영역을 출력했습니다. 텍스트 영역에는 "확장 가능"클래스가 있습니다. 내 HTML 코드에서 Expandable textareas가 나온 직후 div를 출력하곤했습니다.jQuery - DOM에 요소를 동적으로 추가하는 방법은 무엇입니까?

하드 코드는 : jQuery를 통해 이동하고 각 확장 텍스트 영역을 발견하고 그 후에 나의 카운트 DIV의 권리를 삽입하도록

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

나는 그것을 변경하고 싶습니다. 이를 위해 다음 코드를 사용합니다 :

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

이것은 내가 필요한 것을 제공합니다. 하지만 ... 페이지를 만든 후에 페이지에 추가되기 때문에 div가 DOM에 추가되지 않습니다. 나는 그것이 일어날 필요가있다.

"라이브"를 사용해야하고 다른 곳에서 성공적으로 사용하고 있지만이 기능을 사용할 수없는 것으로 알고 있습니다.

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

위의 텍스트 영역의 문자 수를 표시하는 데 count div가 사용됩니다. 키 업 또는 흐림과 같은 사용자 상호 작용은 발생하지 않습니다. 이 코드는 완벽하게 작동하기 때문에이 코드를 포함하지 않았습니다.

당신이 텍스트 영역에 입력 할 때

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

는 다음 카운트 사업부는 "일요일"를 표시해야합니다 편집했다. 이것은 하드 코드 된 Count div와는 완벽하게 작동하지만 동적으로 생성 된 Count div에서는 작동하지 않습니다. 아마도 당신은 그들을 만들기 위해 몇 가지 CSS를 추가해야합니다,

백작 요소

http://jsfiddle.net/jeffreydev/qyuQS/ 추가 얻고있다 :

+0

'그것이 이후의 새로운 요소를 삽입합니다. .. DOM에서. * 여기서 일어나지 않은 일에 대해 자세히 설명해 주시겠습니까? 작동하지 않는 부분에 대해서는 조금 혼란스러워합니다. –

+0

Evik, 게시자가 게시 한 링크를 통해 확인할 수있는 것처럼 count div를 DOM에 추가했기 때문에 질문이 아직 의미가 없습니다. – lonesomeday

+0

텍스트 영역에 입력 할 때 하드 코드 된 div "일요일"보여줍니다. 다음 textarea를 입력하면 동적으로 div를 생성하지 않습니다. 이것은 DOM에 추가되지 않는다는 것을 알려줍니다 (잘못된 것일 수 있음). 어느 쪽이든, 그것은 작동하지 않습니다. –

답변

3

문제는 동적 요소 대 정적이 아니다.

$(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

http://jsfiddle.net/EvikJames/qyuQS/2/ 내가 코드를 사용하여 jsfiddle을했다 :

나는이의 바이올린을 만들었습니다 나타나다?

편집 :

또는 당신이 확장 텍스트 영역의 당신의 DOM에 추가 찾으시는 것입니까? 그 밑에 카운트를 추가하고 싶습니까?

그래서처럼 할 것 그렇다면 :

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

다시 편집 :

으로 다른 사람의 답변에 설명, 당신은 대상 확인 요소 내부의 HTML을 변경하기 위해 오른쪽 구조는 DOM 구조 내부에 있습니다. 여기

는 동작 예이다 http://jsfiddle.net/jeffreydev/qyuQS/12/

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

Explaination ...가 즉시 ​​.after()이 실행 후 DOM에

$(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에 의해 추가되기 전에 양쪽 모두가 주어진 *다는 것을 몰랐다. –

관련 문제