2011-09-24 54 views
3

我正在使用SharePoint 2010,其中一個aspx頁面包含Note Board Web部件,它提供了簡單的功能,可以在給定頁面上留言。使用JQuery在任何AJAX調用之後修改DOM我無法控制

當頁面加載時,評論由該Web部件使用AJAX檢索,我無法控制AJAX調用何時完成。

我試圖插入在每個表中的數據標籤的鏈接或一些文字,Web部件使用的意見,即

<td class="socialcomment">Comment 1</td> 
<td class="socialcomment">Comment 2</td> 
<td class="socialcomment">Comment 3</td> 

到使用JQuery這樣

<td class="socialcomment">Comment 1 <a href="#">Report inappropiate</a></td> 
<td class="socialcomment">Comment 2 <a href="#">Report inappropiate</a></td> 
<td class="socialcomment">Comment 3 <a href="#">Report inappropiate</a></td> 

$('td.socialcomment').append(' <a href="#">Report inappropiate</a>'); 

我還沒有能夠在上面的場景中使用jQuery的live()函數(wo爲了其他場景我有),但我認爲這是因爲它是爲事件設計的。 我也嘗試過.ajaxComplete(),但它並沒有完全實現,因爲我沒有控制Ajax調用或SharePoint執行的Ajax調用未使用JQuery註冊。

任何幫助或洞察力非常感謝。 在此先感謝!

回答

0

我一定希望瞭解比這更好的方法 - 您可以使用setInterval來定期檢查DOM中與您的選擇器匹配的元素,以及您尚未「處理」的元素並將其鏈接添加到它們中並將它們標記爲「已處理」。儘管如此,我不會對樂觀表現感到樂觀。

喜歡的東西:

setInterval(processComments, 250); 

//... 

function processComments() { 
    $('td.socialcomment:not(.processed)').append(' <a href="#">Report inappropiate</a>').addClass('processed'); 
} 

這裏有一個fiddle


更新
根據這一jQuery forum threadliveQuery插件顯然可以讓你指定當新的元素添加到DOM將要執行的功能(使用jQuery的DOM操作方法,如果我理解正確) 。

0

如果Sharepoint中的ajax調用是使用jQuery的ajax框架完成的,那麼您可以註冊一個global ajaxComplete handler,當任何ajax調用完成時它將被調用。這隻適用於使用jQuery進行的Ajax調用。

0

我面臨同樣的問題,我是能夠利用實時功能的這樣

$(window).load(function() { 
    $('span.socialcomment-username').find("a").live({ 
     click: function() { 
     alert("asd"); 
     }, 
     mouseover: function() { 
     $(this).removeAttr('href'); 
     $(this).removeAttr('onclick'); 
     }, 
     mouseout: function() { 
     $(this).removeClass("over"); 
     } 
    }); 
    });