2012-10-04 49 views
0

我想編寫一個函數,將循環通過一系列的div的,單一的是包含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> 

編輯:我不知道爲什麼,但將內容從一個元素複製/粘貼到另一個元素的代碼部分突然開始工作。我已經調整了一些東西,所以我不確定最終做了什麼,但是很好!

但是,整件事仍然失敗是我取消了包裝它的功能。我需要它在一個函數中,以便它可以每30秒重新運行一次。

+0

我不確定我是否按照你的解釋。你能用一個例子來構建一個jsfiddle嗎? –

+0

你可以發佈HTML數據嗎? – Nelson

+0

@RASG我加了一個小提琴。 –

回答

0

至於註釋代碼:

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

更多的東西:
看來.contents()只能作爲吸附劑,如您.contents(postCount)意味着看到api reference不是制定者。

1

使用.html而不是.contents注入數據。

變化

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

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

我原本是把它當作HTML,但它沒有做任何事情,所以我把它切換到內容來看看它是否會起作用。我在原文中添加了一個小提琴,以顯示我正在處理的內容。 –

0

關鍵問題:

  1. .alert()不是財產,不能被捆綁,像這一點。
  2. 在小提琴中;用戶腳本jQuery代碼不好(它在Firefox和其他幾個罪惡之中)。從小提琴中省略這些代碼,因爲它與問題無關,並打破了大多數(可能是所有)用戶的提琴。
  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

沒關係!我將超時函數移到了每個循環之外,現在它正確運行。我需要做的最後一件事是弄清楚爲什麼當我的腳本設置爲只在一個域上運行時,我的腳本會影響其他加載Jquery的站點,那麼我將很好! –