2012-10-04 3 views
0

나는 일련의 divs를 통해 반복 할 함수를 작성하려고합니다. small 요소를 포함하는 div를 하나씩 추출하고 small 요소의 내용을 복제하고 페이지에서 li 요소가 루프의 현재 div의 색인과 일치하는지 확인한 다음 작은 element에서 복제 된 내용을 해당 div 내의 span 요소에 삽입하십시오.Jquery 각 함수의 내부 실패

복제 된 콘텐츠를 li에 삽입해야하는 부분까지 작업하고 있습니다. 아무 반응이 없습니다. 또한 내가 주석 처리 한 코드에 표시된 함수에 넣으려고하면 모든 것이 실패합니다. 어떤 도움을 주시면 감사하겠습니다.

//function NewPosts(){ 
    jQuery('div.tracked_tags > div').each(function (i) { 
     var thisIndex = jQuery(this).index(); 
     if (jQuery(this).find('small').length){ 

      var postCount = jQuery(this).find('small').contents().clone(); 
      //alert('Hey'+postCount.html()+''+thisIndex+''); 

      jQuery('div#right_column ul#tracked_tags li:eq('+thisIndex+')').find('.count').contents(postCount).alert(postCount); 
      //setTimeout(arguments.callee, 30000); 
     } 
    }); 
//}; 

Here's the fiddle. 경고 난 그냥 문제 해결을 위해 그들에 붙어, 중요하지 않습니다. 제안 당

, 이것은 기본적으로 내가 함께 시작하고 코드입니다 :

<div class="tracked_tags"> 
     <div> 
       <small id="blah" class="count">10 new posts</small> 
                </a> 
     </div> 
     <div> 
       <small id="blah2" class="count">5 new posts</small> 
                </a> 
     </div>      
</div> 

<ul id="tracked_tags"> 
<li><a href=""><span class="count"></span></a></li> 
<li><a href=""><span class="count"></span></a></li> 
</ul> 

그리고 이것은 내가 함께 결국 원하는 것입니다 :

<ul id="tracked_tags"> 
<li><a href=""><span class="count">10 new posts</span></a></li> 
<li><a href=""><span class="count">5 new posts</span></a></li> 
</ul> 

편집 : 난 이유는 모르지만 한 요소의 콘텐츠를 다른 요소로 복사/붙여 넣는 코드 부분이 갑자기 작동하기 시작했습니다. 나는 그것을 끝내기 위해 끝났을 정도로 약간의 물건을 비틀었다. 그러나 huzzah!

그러나 모든 것이 여전히 실패합니다.이 함수를 감싸는 함수의 주석 처리를 제거합니다. 30 초마다 재실행 할 수 있도록 함수에 있어야합니다. 주석 코드로

+0

귀하의 설명을 잘 모르겠습니다. 예를 들어 jsfiddle을 만들 수 있습니까? –

+0

HTML 데이터를 게시 할 수 있습니까? – Nelson

+0

@RASG 나는 바이올린을 추가했습니다. –

답변

0

:

//function NewPosts(){ 
//}; 
    ^---REMOVE THIS 

더 많은 일을 : 당신이 .contents(postCount)와 의미 api reference를 참조로
그것은 (가)에만 게터로 작동 .contents을 보인다 세터 없습니다.

1

데이터를 삽입하려면 .html이 아닌 .contents을 사용하십시오.

변경

find('.count').contents(postCount); 

find('.count').html(postCount) 
+0

원래 HTML로 만들었지 만 아무 것도하지 않아서 대신 내용으로 전환하여 대신 작동하는지 확인했습니다. 나는 원래의 포스트에 바이올린을 추가하여 내가하고있는 것을 보여 주었다. –

0

주요 문제 :

  1. .alert()는 속성 아니고, 그런 식으로 체인 수 없습니다.
  2. 피들에서; 그 userscript jQuery 코드는 좋지 않습니다 (다른 여러 죄들 사이에서 Firefox에서 깨졌습니다). 피들 (Fiddle)과 같은 코드는 질문과 관련이 없으므로 생략하십시오. 대부분의 (아마 모든) 사용자를위한 바이올린을 깨뜨릴 수 있습니다.
  3. 함수 (NewPosts)에 래핑 된 후에는 myFunction()에서 호출하지 않으면 코드가 실행되지 않습니다 (또는 나중에 <script> 노드가 삽입 됨).

적은 문제 :

  1. 포스트 카운트 (샘플 HTML에서 가능성이 보인다, .contents() 또는 .html()를 사용하지 않는 그냥 마찬가지로 .text()
  2. 를 사용하여 내용이 포함 onless 단지 텍스트 인 경우. 특히 이벤트 리스너가있는 HTML 노드는 .clone()에 대한 필요/요점이 없습니다.

어쨌든 1, 2 및 3 수정 문제 코드가 작동하는 것 같습니다. this fiddle을 참조하십시오.

function NewPosts() { 
    jQuery('div.tracked_tags > div').each(function (i) { 
     var thisIndex = jQuery(this).index(); 
     if (jQuery(this).find('small').length){ 

      var postCount = jQuery(this).find('small').contents().clone(); 
      //alert('Hey'+postCount.html()+''+thisIndex+''); 

      jQuery('div#right_column ul#tracked_tags li:eq('+thisIndex+')').find('.count').contents(postCount); 
      //setTimeout(arguments.callee, 30000); 
     } 
    }); 
}; 

NewPosts(); 
+0

감사합니다. 한 가지를 제외하면 이제는 작동합니다. settimeout의 간격으로 함수가 다시 실행되면 각 실행마다 함수가 수십 번 더 실행되는 것 같습니다. 나는 그것이 실행 중임을 테스트하기 위해 경보를 울리고, 매번 전체 코드로 다섯 번만 경고해야하는 반면, 처음 30 초 간격으로 12+를 얻은 다음, 그 이후에 각각 수십 번 더 실행합니다. 이유를 모르겠다. –

+0

신경 쓰지 마라! 나는 각 루프 바깥에서 timeout 함수를 움직 였고 지금은 제대로 실행 중이다. 마지막으로해야 할 일은 내 스크립트가 Jquery를로드하는 다른 사이트에 영향을 미치는 이유를 파악한 후 한 도메인에서만 실행되도록 설정 한 다음 이동하는 것이 좋습니다. –